我有一些 Core Data 功能可以正常工作,直到最近进行了一些(看似无关的)更改。现在我遇到了属于特定 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
setValue: 为我的对象调用,传入的参数是非零 NSDate。然后检索该值(以另一种方法)。正确检索指定的相同值。
但是,当另一个方法尝试读取值时,会调用值访问器,并且primitiveValueForKey: 返回一个 nil 值。
在两次读取之间 setValue: 未被调用并且 Foo 对象本身仍然有效(非零)。事实上,在对任何 Core Data 对象或整个上下文的两次读取之间没有执行其他 Core Data 操作。
我们在项目中使用 ARC。ARC是否有可能以某种方式弄乱我的核心数据变量并释放它们?如果是这样,是否有人对调试 ARC 释放有任何建议?或者更好的是,有没有人知道一种方法来确保 ARC 不会释放我的变量。
这甚至可能与 ARC 无关,但是我对正在发生的事情有点茫然。任何建议将不胜感激。