gpt4 book ai didi

iphone - 为什么 Core Data 创建带有属性但没有伴随实例变量的 NSManagedObject?

转载 作者:行者123 更新时间:2023-12-03 16:23:01 27 4
gpt4 key购买 nike

正如标题所说,为什么 Core Data 创建 NSManagedObject 实例,其中包含每个实体属性的属性,但没有附带实例变量?问题是,我想在代码的某些部分以典型的 alloc/init 风格方式使用我的一些“实体”。不使用核心数据的获取/上下文来创建/存储。

我想我可以不使用实例变量,但是添加它们会不会有什么坏处?我还可以将 @dynamic 更改为 @synthesize 以便我可以在我的属性/ivars 上使用 KVC 吗?

也许我尝试在代码的某些部分使用核心数据实体之一而不使用核心数据 API 是完全错误的。对于什么时候我可以走自己的路还很陌生。

最佳答案

它不使用 ivars 的原因是该数据不存在。当您加载一个对象时,它的所有数据可能不会出错。 ivars 只是变量,如果您向它们写入 NSManagedObject 如果尚未加载,则不会有机会在值中出错。通过访问器 NSManagedObject 有一个阻塞点,如果尚未出现故障,则允许它从磁盘读取数据,这意味着您的对象图可以延迟引入。否则,您将需要引入每个连接的对象。

因此,您不能只添加 ivars,它们不会具有您想要的值。同样,您无法从 @dynamic 更改为 @synthesized,事情将无法正常运行。无论如何,CoreData 提供的动态属性实现完全符合 KVC 和 KVO。

如果您想在不触发 KVO 或 KVC 的情况下访问这些值,您可以访问“原始”值。您可以通过两种方式之一来做到这一点。您可以使用 PrimitiveValueForKey: 和 setPrimitive:valueForKey: 或者您可以只声明原语并让 CD 提供动态实现(来自 documentation )

@interface Department : NSManagedObject
{
}
@property(nonatomic, retain) NSString *name;
@end

@interface Department (PrimitiveAccessors)
- (NSString *)primitiveName;
- (void)setPrimitiveName:(NSString *)newName;
@end

关于iphone - 为什么 Core Data 创建带有属性但没有伴随实例变量的 NSManagedObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225418/

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