【发布时间】:2015-11-30 02:02:33
【问题描述】:
基于一些有限的测试,我发现如果我
- 执行结果类型 = NSDictionaryResultType 的 Fetch 请求
- 对返回的值进行一些操作
- 存储执行 Fetch 请求的 MOC
步骤 2 中的更改不会写回持久存储,因为我正在更改字典而不是“托管对象”。这是正确的理解吗?
【问题讨论】:
标签: ios cocoa core-data nsfetchrequest
基于一些有限的测试,我发现如果我
步骤 2 中的更改不会写回持久存储,因为我正在更改字典而不是“托管对象”。这是正确的理解吗?
【问题讨论】:
标签: ios cocoa core-data nsfetchrequest
您很可能在滥用字典结果类型。与传统的数据库编程不同,由于一种称为“故障”的底层机制,在获取整个对象而不是仅一个选定的属性时,您不会浪费宝贵的内存资源。
尝试使用托管对象结果类型(默认)获取,您可以非常轻松地操作对象并将它们保存回 Core Data。您不需要为了获取要更改的对象而进行额外的提取。
只有在数据量大、关系分组逻辑困难等特殊情况下才考虑字典,这绝对是必要的。
(话虽如此,它不太可能是绝对必要的。我还没有遇到过这样的情况,即需要字典进行提取不是数据模型设计缺陷的间接结果。)
【讨论】:
是的,您不能将字典直接存储回上下文中,因此您不能以这种方式保存任何更新。
如果您获得一个字典对象,那么您需要在其中包含相关的托管对象 ID(如果它没有被聚合)或执行另一个获取以获取要更新的对象。
【讨论】: