将NSFetchedResultsController纯粹用于数据管理,即不使用它为UITableView提供数据,这是错误的吗
我在核心数据iPhone应用程序中有一对多关系。每当该关系中的数据发生变化时,我都需要执行需要对这些数据进行排序的计算。在Apple的标准部门/员工示例中,这将类似于确定给定部门的中位数工资。无论何时将员工添加到该部门或从该部门中删除员工,或者员工的薪资发生变化,都需要再次执行中位数计算。
对NSFetchedResultsController来说,保持数据的有序和最新,并在数据发生变化时获得通知听起来是一项很棒的工作。唯一的“问题”是我没有使用UITableView。换句话说,我不会在UITableView中显示排序的员工。我只想要一个最新的雇员排序数组,这样我就可以在幕后分析他们。(当然,我不想写一大堆重复NSFetchedResultsController的代码。)
仅仅为了数据管理而使用NSFetchedResultsController,也就是说,不使用它来提供UITableView,这是不是一个坏主意?我在任何地方都没有见过这样做,我想我可能遗漏了一些东西。
发布于 2010-07-10 05:52:09
我不会说它不好,但绝对是“沉重”的。
通过NSManagedObjectContextDidSaveNotification监视保存并在那里进行计算将会减少内存和CPU。通知将在其userInfo中附带三个NSArray实例,然后您可以对这些数组使用简单的NSPredicate,以查看您关心的任何员工是否发生了更改并做出响应。
这是NSFetchedResultsController在幕后做的事情的一部分。但是,您将避免使用NSFetchedResultsController中不关心或不需要的其他部分。
重的
NSFetchedResultsController执行更多的处理,而不仅仅是观察保存的对象。它处理增量,调用它的委托,等等。我是而不是说它在任何形式或形式上都不好。我要说的是,如果你只关心对象在你的关系中什么时候发生了变化,你可以通过观察通知来很容易地做到这一点。
内存
此外,没有理由保留任何内容,因为您已经持有"Department“实体,因此可以访问它的关系。保留子对象“以防万一”是一种内存浪费。让Core Data管理内存,这是使用它的部分原因。
发布于 2010-07-10 05:35:19
在没有视图的情况下使用NSFetchedResultsController并没有什么错。你的用例听起来像是一个不重复发明轮子的好理由。
发布于 2010-07-10 05:36:12
对我来说,这听起来像是NSFetchedResultController的恰当用法。这可能有点夸大其词,因为它的主要用途是帮助填充和保持最新的tableViews,但是如果您愿意忍受增加的复杂性,就没有理由不使用它。正确使用通知是另一种方法,它就像我估计的那样复杂。
https://stackoverflow.com/questions/3216685
复制相似问题