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