我很擅长使用Core Data,所以我可能做错了。
我正在NSFetchedResultsController
使用UITableView
,而performFetch()
函数会解码相应实体中的所有对象。但是,我只想解码prepareForSegue
函数中的一个,而不是在加载视图时解码所有这些,因为解码我的自定义对象需要一段时间。
我该如何解决?我是否应该创建一个额外的实体来包含我不需要绘制表格单元格的信息,但只需要在下一个视图中,或者这里是否需要一对一的关系?
答案 0 :(得分:1)
听起来这个属性是核心数据"可转换"属性,以便Core Data在加载和保存数据时自动调用NSCoding
方法。
您所看到的内容对于该设计来说是正常的。当您获取托管对象时,它是一个"错误"没有属性值的对象。但只要您访问任何属性值,就会加载所有,包括转换。如果这是一个问题(我的第二个@Wain建议在根据假设进行更改之前使用Instruments验证这一点),您可以选择处理它。没有特别的顺序,这些包括:
NSCoding
方法。两种属性类型都表示该值存储为二进制blob,唯一的区别在于您是调用NSCoding
方法还是让Core Data为您执行此操作。通过此更改,您仍然会将所有属性的数据加载到内存中,但除非您认为必要,否则您不会使用init(coder:)
方法。 propertiesToFetch
,同时将requestType
设置为NSDictionaryResultType
。这样您就不会获取此属性,但它会为您提供NSDictionary
个对象,而不是NSManagedObject
(或您的子类)。这些都需要对代码进行一些重构,并提供不同程度的便利。