iOS,核心数据:故障NSManagedObjects

时间:2014-07-16 17:19:40

标签: ios core-data

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 个答案:

答案 0 :(得分:2)

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

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