iOS,核心数据:错误的 NSManagedObjects

Posted

技术标签:

【中文标题】iOS,核心数据:错误的 NSManagedObjects【英文标题】:iOS, Core Data: Faulting NSManagedObjects 【发布时间】:2014-07-16 17:19:39 【问题描述】:
case 0:
        
            NSFetchRequest *request=[NSFetchRequest fetchRequestWithEntityName:@"Grade"];
            NSPredicate *predicate=[NSPredicate predicateWithFormat:@"abbr==%@",@"UNDEF"];
            [request setPredicate:predicate];
            NSArray *result=[_context executeFetchRequest:request error:nil];
            Grade *grade=[result lastObject];
            duplicate.grade=grade;
            break;
        

...

[self backgroundSaveContext];

很简单的问题。在“案例”完成后,检索到的对象会发生什么?我应该故障对象还是由 ARC 来管理它?此代码不在主线程中执行。

【问题讨论】:

【参考方案1】:

ARC 不管理托管对象的故障。 您正在将 duplicate.grade 设置为从您的 fetch 中检索到的对象。如果这是一个强引用,则托管对象将被强保留 - 但这不会影响触发错误。只有当您访问该对象的属性时才会触发故障。

当您使用默认获取请求选项从存储中获取托管对象时,托管对象未实现 - 属性没有附加数据。这是故障状态。当您访问托管对象属性时,Core Data 会“触发错误”——它会返回存储区以获取属性值并使用这些值填充托管对象。托管对象上的属性访问器方法调用willAccessValueForKey:,它将实现(触发)故障。

【讨论】:

'ARC 不管理托管对象的故障'为此 +1。 '只有当您访问该对象的属性时才会触发错误'。请解释一下这部分。

以上是关于iOS,核心数据:错误的 NSManagedObjects的主要内容,如果未能解决你的问题,请参考以下文章

要保存在服务器中的核心数据的唯一 ID

iOS,核心数据:错误的 NSManagedObjects

带有谓词的 ios 核心数据错误

iOS 核心数据 - 严重的应用程序错误 - 尝试插入零 - 不到 1%

在此模型中找不到名为“Book”的实体。 ios核心数据错误?

iOS:核心数据和磁盘空间