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

标签 objective-c core-data automatic-ref-counting

我有一些核心数据功能,在最近进行了一些(看似无关的)更改之前一直运行良好。现在我遇到了属于特定 NSManagedObject 子类实例的所有属性突然返回 nil 的问题。

假设我的 NSManagedObject 子类称为 Foo,它只有一个名为值的属性。一旦我意识到值(value)不知何故变成了零,我就去设置以下类别来监控值(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 无关,但我对发生的事情有点不知所措。任何建议将不胜感激。

最佳答案

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

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

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

关于objective-c - 核心数据属性更改为 nil(与 ARC 相关?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199143/

相关文章:

ios - 核心数据 IOS : How to create an object with values without it being marked as having changes

iphone - 从核心数据查询行数的最佳方法是什么?

iPhone:在 Core Data 中存储视频和音频?

objective-c - 关于 ARC for iOS 的几个问题?

ios - 在 iOS 中使用分割 View Controller 的问题

iPhone:设置导航栏标题

objective-c - NSLayoutConstraints 和动态设置 View 的宽度/高度

ios - 使用电子邮件地址检查 PayPal 帐户是否存在?

objective-c - 为什么我不能再释放一个对象?

iphone - [UIViewController 哈希] : message sent to deallocated instance with ARC