gpt4 book ai didi

objective-c - 将 ivars 添加到 NSManagedObject 子类

转载 作者:行者123 更新时间:2023-11-28 18:39:18 26 4
gpt4 key购买 nike

当我使用核心数据创建实体然后从中生成 NSManagedObject 的子类时,我得到以下输出(在 .h 中):

@class Foo;

@interface Foo : NSManagedObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSSet *otherValues;

@end

但是,在我的 .m 文件中,我想使用 nameotherValues 值。通常我会简单地创建几个 ivar,然后根据需要为它们添加属性。这样我就可以轻松地在我的 .m 文件中访问它们。

在这种情况下,这样做是否可以接受?将 ivars 添加到 .h(对于 nameotherValues)是否会导致对象的持久性和检索出现异常行为?

最佳答案

您不使用实例变量来访问 Core Data 托管对象的属性。

生成的实现文件包含语句

@dynamic name;
@dynamic otherValues;

这意味着核心数据属性的 getter/setter 函数是动态创建的,例如从托管对象上下文或底层持久存储中检索值。

所以你应该总是使用属性来访问属性,例如:

Foo *myFoo = [NSEntityDescription insertNewObjectForEntityForName:@"Foo" inManagedObjectContext:context];
myFoo.name = @"test";

或者,您可以使用键值方法:

[myFoo setValue:@"test" forKey:@"name"];

另请参阅:Modeled Properties在《核心数据编程指南》中:

Core Data dynamically generates efficient public and primitive get and set attribute accessor methods ... In a managed object sub-class, you can declare the properties for modeled attributes in the interface file, but you don’t declare instance variables.

关于objective-c - 将 ivars 添加到 NSManagedObject 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13451686/

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