NSFetchedResultsController performFetch 函数解码所有对象
NSFetchedResultsController performFetch function decodes all objects
我对使用 Core Data 还很陌生,所以我可能做错了什么。
我将 NSFetchedResultsController
与 UITableView
一起使用,performFetch()
函数解码相应实体中的所有对象。但是,我只想解码 prepareForSegue
函数中的一个,而不是在加载视图时立即解码所有这些,因为解码我的自定义对象需要一段时间。
我该如何解决?我是否应该创建一个额外的实体来包含我不需要绘制 table 单元格但只在下一个视图中需要的信息,或者一对一的关系在这里是否合适?
听起来这个属性是 Core Data "transformable" 属性,因此 Core Data 在加载和保存数据时会自动调用 NSCoding
方法。
您所看到的对于该设计来说是正常的。当您获取托管对象时,它是一个没有 属性 值的 "fault" 对象。但是,一旦您访问 any 属性值,就会加载 all 属性值,包括可变形对象。如果这是一个问题(我支持@Wain 的建议,即在根据假设进行更改之前使用 Instruments 来验证这一点),您可以选择一些方法来处理它。排名不分先后,包括:
- 将属性设为 "binary" 而不是 "transformable",然后添加您自己的代码以仅在实际需要时调用
NSCoding
方法。这两种属性类型都意味着该值存储为二进制 blob,唯一的区别是您是调用 NSCoding
方法还是让 Core Data 为您做。通过此更改,您仍会将所有属性的数据加载到内存中,但您不会 运行 通过 init(coder:)
方法 until/unless 您认为有必要。
- 在提取请求上使用
propertiesToFetch
,同时将 requestType
设置为 NSDictionaryResultType
。这会让你不获取这个属性,但是它会给你 NSDictionary
个对象而不是 NSManagedObject
(或你的子类)。
- 将此属性的数据移动到一个单独的相关实体中。核心数据故障触发加载对象的属性值,但不加载其相关对象。因此,在您决定遍历关系之前,您可以获取正在获取但没有任何数据的任何实体 encode/decode。
其中每一个都需要对代码进行一些重构,以提供不同程度的便利。
我对使用 Core Data 还很陌生,所以我可能做错了什么。
我将 NSFetchedResultsController
与 UITableView
一起使用,performFetch()
函数解码相应实体中的所有对象。但是,我只想解码 prepareForSegue
函数中的一个,而不是在加载视图时立即解码所有这些,因为解码我的自定义对象需要一段时间。
我该如何解决?我是否应该创建一个额外的实体来包含我不需要绘制 table 单元格但只在下一个视图中需要的信息,或者一对一的关系在这里是否合适?
听起来这个属性是 Core Data "transformable" 属性,因此 Core Data 在加载和保存数据时会自动调用 NSCoding
方法。
您所看到的对于该设计来说是正常的。当您获取托管对象时,它是一个没有 属性 值的 "fault" 对象。但是,一旦您访问 any 属性值,就会加载 all 属性值,包括可变形对象。如果这是一个问题(我支持@Wain 的建议,即在根据假设进行更改之前使用 Instruments 来验证这一点),您可以选择一些方法来处理它。排名不分先后,包括:
- 将属性设为 "binary" 而不是 "transformable",然后添加您自己的代码以仅在实际需要时调用
NSCoding
方法。这两种属性类型都意味着该值存储为二进制 blob,唯一的区别是您是调用NSCoding
方法还是让 Core Data 为您做。通过此更改,您仍会将所有属性的数据加载到内存中,但您不会 运行 通过init(coder:)
方法 until/unless 您认为有必要。 - 在提取请求上使用
propertiesToFetch
,同时将requestType
设置为NSDictionaryResultType
。这会让你不获取这个属性,但是它会给你NSDictionary
个对象而不是NSManagedObject
(或你的子类)。 - 将此属性的数据移动到一个单独的相关实体中。核心数据故障触发加载对象的属性值,但不加载其相关对象。因此,在您决定遍历关系之前,您可以获取正在获取但没有任何数据的任何实体 encode/decode。
其中每一个都需要对代码进行一些重构,以提供不同程度的便利。