ios - 带有附加对象的 NSFetchedResultsController

标签 ios core-data

我正在尝试使用 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/

相关文章:

ios - applicationWillEnterForeground 呈现一个 View Controller

ios - 开始使用 UITableView?

objective-c - NSManagedObjectContext,在哪里声明?

iphone - 如何将核心数据导出到 CSV

ios - objective-c : Send coredata objects by imessage & eMail

ios - RestKit saveToPersistentStore 不起作用

应用重新安装后的 iOS 位置权限

ios - 如何将 AVMutableVideoComposition 转换为 AVAsset

ios - ScanForPeripheral 状态保留与恢复 iOS

ios - iOS 核心数据中的多个上下文