我想在表格视图中加载员工。第一次加载我的表格视图时,我想加载所有没有主管的员工,然后,当我单击一个单元格(其中包含一个员工)时,我想加载那个特定员工的所有主管。我正在使用导航控制器,所以我想来回导航。我想我需要一遍又一遍地推送我的 tableview 的新实例。但问题是,我正在启动一个新的 Employee 对象,而且一遍又一遍,但我该如何管理呢?因为例如,我需要将 supervisorx 的 superviseex 保存到 supervisorx。我点击 supervisorx,一个新的 tableview 加载,其中没有员工。我在此表中添加了一个 superviseex,但这意味着我的员工对象现在是 superviseex。我该如何管理我可以将 superviseex 保存到 supervisorx,
2 回答
我不确定我是否理解,但我会尝试。
您正在推送视图控制器的新实例,而不是视图,因此您可以在控制器中有一个属性,说明它正在为哪个主管显示数据。如果它有 nil 作为主管,它可以检索所有没有主管的员工,如果给它一个有效的主管,它可以显示向该主管报告的员工。核心数据只是读取集合的内容(假设是一对多的关系),而不必获取任何东西。
尝试在员工身上挂上一面旗帜,说明他们是主管。然后你可以用它来区分它们。
我会有另一个地方让我看到所有没有主管的非主管。
您还为员工建立了两个关系以指向员工实体一个称为主管,这是一个多对一的关系。反之是雇员,这是一对多的关系。
现在你需要 3 个控制器。
应用程序的主根控制器,显示具有默认设置的默认表。(isSupervisor == YES 的所有员工)... 对表使用 NSFetchedResultController
雇员表控制器。它接收一个 Employee 并在该员工之外创建一个 NSFetchedResultsController 以显示所有附加到该员工的员工。该表应使用该 NSFetchedResultsController 来显示其员工。
员工信息控制器。显示员工数据并让您链接回他们的主管(用于员工信息)或他们的员工(员工表控制器的另一个副本)
导航为您保存控制器。所以你可以分配,初始化(如果你的非弧,则自动释放)并推送。
如果他们堆叠 100 件物品,那么他们将是处理它的人。
如果您想在他们关闭应用程序时清除堆栈,您可以手动设置 navigationController.viewControllers 数组以停用和激活应用程序。
除此之外。让控制器处理自己的数据访问。当您保存上下文项目时,您有两个选择。
选项 1. 使用一个上下文(重要:将所有数据访问与上下文保持在同一个线程上。如果使用串行线程,则必须使用 @synchronized(managedObjectContext)
选项 2. 实现 managedObjectContext 的保存通知以在对象上下文的其余部分中传播您的保存
注意:如果您使用多个线程,您可以使用 managedObjectContext.objectID 跨线程传递对象,此时您可以从中加载,-[NSManagedObjectContext objectWithID:(NSManagedObjectID*)]
您可以在任何托管对象 ID 上执行此操作managedObjectID.isTemporaryID == NO
Ray 有一篇关于如何使用 NSFetchedResultsController 的精彩文章,甚至包括在 FetchedResults 发生变化时让表格优雅地更新。