每当我在NSFetchRequest上使用setPropertiesToFetch时,返回的对象似乎都会出现故障。它们返回YES到isFaulted,当它们在控制台中显示时,它们显示如下:
< MyEntity: 0x5884850> (entity: MyEntity; id: 0x5886180 <x-coredata://4D96A1CB-187C-4D92-A50C-D639F7E69114/MyEntity/p197> ; data: <fault>),
如果我没有设置要获取的属性,那么每个对象的属性在控制台中都是可见的。知道为什么会这样吗?
答案 0 :(得分:2)
我从Apple开发者论坛得到了答案:
https://devforums.apple.com/message/152330#152330
“作为错误的对象意味着它可能需要访问数据库,或者它可能意味着该对象正在等待延迟初始化并且所有必要的数据都被缓存。跟踪您的应用程序仪器中的核心数据模板是凭经验区分差异的最佳方式。
对于setPropertiesToFetch,您有意不提取所有属性,因此最终会出现部分错误。访问一些属性(您告诉它获取的属性)将起作用,访问其他属性将需要往返数据库。 -isFault是一个布尔值,因此大多数框架都会处理部分错误,就像它们只是故障一样。“
答案 1 :(得分:0)
默认情况下,Core Data会在第一次将对象加载到托管对象上下文时将其作为错误提取。在您要求之前,它不会填充属性。如果您需要获取请求以返回非故障对象,则可以使用setReturnsObjectsAsFaults:YES
答案 2 :(得分:0)
文档说明-setPropertiesToFetch:
的值仅在resultType
设置为NSDictionaryResultType
时使用。