核心数据属性更改为nil(ARC相关?)

Ben*_*ell 8 core-data objective-c automatic-ref-counting

我有一些核心数据功能正常工作,直到最近(看似无关)一些更改.现在我遇到的问题是属于特定NSManagedObject子类实例的所有属性突然返回nil.

假设我的NSManagedObject子类名为Foo,它只有一个名为value的属性.一旦我意识到价值以某种方式变为零,我去设置以下类别来监控价值变化.

@implementation Foo (Debug)

- (void)setValue:(NSDate *)value
{
    [self willChangeValueForKey:@"value"];
    [self setPrimitiveValue:value forKey:@"value"];     
    [self didChangeValueForKey:@"value"];
}

- (NSDate *)value
{
    [self willAccessValueForKey:@"value"];
    NSDate *value = [self primitiveValueForKey:@"value"];
    [self didAccessValueForKey:@"value"];

    return value;
}

@end
Run Code Online (Sandbox Code Playgroud)

setValue:为我的对象调用,传入的参数是一个非零NSDate.然后检索该值(在另一种方法中).正确检索指定的相同值.

但是,当另一个方法尝试读取值时,将调用值访问器并由primitiveValueForKey:返回nil值.

在两个读取之间,setValue:未被调用,并且Foo对象本身仍然有效(非零).事实上,在任何Core Data对象或整个上下文的两次读取之间不会执行其他Core Data操作.

我们在项目中使用ARC.有可能ARC在某种程度上搞乱了我的核心数据变量并取消分配它们吗?如果是这样,有人有任何调试ARC解除分配的建议吗?或者更好的是,有没有人知道确保ARC不释放我的变量的方法.

这甚至可能与ARC无关,但是对于发生的事情我有点不知所措.任何建议将非常感谢.

Dan*_*ert 12

这很可能是因为NSManagedObjectContext这些对象所属的东西正在消失.当你有NSManagedObject实例但你没有自己坚持上下文时,那些托管对象将开始返回nil.

在ARC下,确保将上下文存储在strong变量中,即不是weakstatic全局的实例变量.

非ARC,即保留释放代码,确保您保留上下文.