【问题标题】:iOS, Core Data: Faulting NSManagedObjectsiOS,核心数据:错误的 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 来管理它?此代码不在主线程中执行。

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

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

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

    【讨论】:

    • 'ARC 不管理托管对象的故障'为此 +1。
    • '只有当您访问该对象的属性时才会触发错误'。请解释一下这部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多