gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 03:28:32 24 4
gpt4 key购买 nike

我有一些核心数据功能,在最近进行了一些(看似无关的)更改之前一直运行良好。现在我遇到了属于特定 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com