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的主要内容,如果未能解决你的问题,请参考以下文章
iOS 核心数据 - 严重的应用程序错误 - 尝试插入零 - 不到 1%