在没有UITableView的情况下使用NSFetchedResultsController

Jam*_*ton 10 iphone core-data

NSFetchedResultsController纯粹用于数据管理是不正确的,即不使用它来提供数据UITableView

我在Core Data iPhone应用程序中有多对多的关系.每当该关系中的数据发生变化时,我需要执行一项计算,该计算要求对数据进行排序.在Apple的标准部门/员工示例中,这就像确定给定部门的工资中位数一样.每当将员工添加到该部门或从该部门移除员工,或员工的工资变化时,都需要再次执行中位数计算.

保持数据排序和当前以及在发生变化时收到通知听起来像是一项出色的工作NSFetchedResultsController.唯一的"问题"是我没有使用UITableView.换句话说,我没有在a中显示已排序的Employees UITableView.我只想要一个最新排序的Employees数组,以便我可以在幕后分析它们.(当然,我不想写一堆复制很多的代码NSFetchedResultsController.)

使用NSFetchedResultsController纯粹的数据管理是不是一个坏主意,即不使用它来提供数据UITableView?我没有在任何地方看到过这种情况,并认为我可能会遗漏一些东西.

Mar*_*rra 11

我不会称之为糟糕但绝对"沉重".

通过它进行保存NSManagedObjectContextDidSaveNotification并在那里进行计算会减少内存和CPU .通知将在其中包含三个NSArray实例,userInfo然后您可以使用简单的数据NSPredicate来查看这些数组,以查看您关心的任何员工是否已更改并做出响应.

这是幕后工作的一部分NSFetchedResultsController.但是,你会避免NSFetchedResultsController你不关心或不需要的其他部分.

NSFetchedResultsController处理比保存对象更多的处理.它处理增量,对其代表进行调用等.我并不是说它在任何形式或形式上都是坏的.我所说的是,如果您关心对象在关系中的变化,那么只需观察通知就可以轻松完成.

记忆

此外,由于您已经持有"部门"实体并因此访问其关系,因此没有理由保留任何内容.抓住孩子对象"以防万一"是浪费记忆.让Core Data管理内存,这是使用它的部分原因.