gpt4 book ai didi

objective-c - Core Data 中的自定义初始化程序和只读属性

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:40 28 4
gpt4 key购买 nike

在使用 Objective-C 和 Core Data 之前,我有时会创建需要使用某些参数初始化的类,这些参数在初始化后无法修改(尽管可以读取)。

有了 Core Data,我相信我可以在我的 NSManagedObject 派生类上创建一个自定义的 init,只要它包括一种将对象插入到这样的上下文中的方法:

-(Cell*) initWithOwner:(CellList*)ownerCellList andLocation:(int)initLocation
{
if (self = (Cell*) [NSEntityDescription insertNewObjectForEntityForName:@"Cell"
inManagedObjectContext:[ownerCellList managedObjectContext]])
{
self.location = [NSNumber numberWithInt:initLocation];
self.owner = ownerCellList;
[ownerCellList addCellListObject:self];
}
return self;
}

通常,我会有一个位置变量,并且位置属性是只读的(因此一旦在初始化时设置,就无法更改)。有没有办法用核心数据获得这种模式?有没有我没有想到的更好的方法?

谢谢!

最佳答案

你是对的。只要您的初始化程序调用 NSManagedObject 的指定初始化程序,您的方法就可以了。您还可以覆盖 -[NSManagedObject awakeFromInsert] 以在插入(创建)后执行某些操作或 -[NSManagedObject awakeFromFetch] 以执行操作(例如填充缓存)对象被错误返回托管对象上下文的时间。

与 Objective-C 的其余部分一样,无法使属性真正只读。恶意代码可能会修改您的属性(property)。但是,在您的自定义类中,您可以声明一个 @property(readonly) 例如位置。如果您尝试修改该属性,这至少会引起警告,并会向客户端代码发出您的意图信号。

关于objective-c - Core Data 中的自定义初始化程序和只读属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1661515/

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