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变量中,即不是weak或static全局的实例变量.
非ARC,即保留释放代码,确保您保留上下文.
| 归档时间: |
|
| 查看次数: |
2456 次 |
| 最近记录: |