我正在尝试使用 nsfetchedresultscontroller 从数据库中获取对象以在 TableView 中显示。我想将一些自定义对象附加到获取的对象以用于显示目的。执行此操作的最佳方法是什么?
我目前的方法是将 [fetchedresultscontroller fetchedObjects] 存储在一个名为 objectsDatasource 的数组中,并将我的对象附加到它。我使用这个 objectsDatasource 作为 tableview 的数据源。当我收到 controllerDidChangeContent 时,我再次调用 fetchedObjects 并重新加载我的 objectsDatasource。会不会有什么性能问题?
替代方案是放弃 nsfetchedresultscontroller 并创建我自己的数组并将观察者添加到 NSManagedObjectDidSaveNotification。
[fetchedResultsController fetchedObjects] 是否一开始就将所有对象作为故障获取,并且仅在访问该属性时才触发故障?
最佳答案
我将避免复制从获取结果 Controller 返回的数组,并尽可能将我添加的结果保存在一个单独的数组中(从获取结果 Controller 返回的数组是一个虚拟游标,指向存储在数据库中的实际数据,并且可能实际上并没有将整个数据集保存在内存中)。
如果附加项没有与从获取结果 Controller 返回的结果混合,我什至可能会将它们放在表格中它们自己的部分。
Does [fetchedResultsController fetchedObjects] fetch all the objects as faults initially and only fire the fault when the property is accessed?
这取决于分配给获取结果 Controller 的获取请求。
如果您设置:[request setReturnsObjectsAsFaults:NO]
和 [request setIncludesPropertyValues:YES]
, Controller 将在对象第一次从数据库中获取时出错,而不是在它们再次获取时出错出现故障(性能好得多)。
关于ios - 带有附加对象的 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15743761/