gpt4 book ai didi

objective-c - NSManagedObject 的自定义初始值设定项

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:36 24 4
gpt4 key购买 nike

根据文档:

You should not override init. You are discouraged from overriding initWithEntity:insertIntoManagedObjectContext:

您应该改为使用 awakeFromInsert 或 awakeFromFetch。

如果我只想将某些属性设置为当前日期或类似日期,这很好,但如果我想发送另一个对象并根据其信息设置属性怎么办?

例如,在名为“Item”的 NSManagedObject 子类中,我想要一个 initFromOtherThing:(Thing *)thing,其中项目的名称设置为事物的名称。我想避免“只需要记住”每次创建项目后立即设置名称,并且当我决定我希望 Item 也设置另一个基于 Thing 的默认属性时必须更新十五个不同的 Controller 类。这些是与模型相关的操作。

我该如何处理这个问题?

最佳答案

我认为处理此问题的最佳方法是子类化 NSManagedObject,然后创建一个类别来保存要添加到对象的内容。例如一些用于唯一化和方便创建的类方法:

+ (item *) findItemRelatedToOtherThing: (Thing *) existingThing inManagedObjectContext *) context {
item *foundItem = nil;
// Do NSFetchRequest to see if this item already exists...
return foundItem;
}

+ (item *) itemWithOtherThing: (Thing *) existingThing inContext: (NSManagedObjectContext *) context {
item *theItem;
if( !(theItem = [self findItemRelatedToOtherThing: existingThing inManagedObjectContext: context]) ) {
NSLog( @"Creating a new item for Thing %@", existingThing );
theItem = [NSEntityDescription insertNewObjectForEntityForName: @"item" inManagedObjectContext: context];
theItem.whateverYouWant = existingThing.whateverItHas;
}
return theItem;
}

现在不要直接调用 initWithEntity:insertIntoManagedObjectContext: 只需使用您方便的类方法,例如:

item *newItem = [item itemWithOtherThing: oldThing inContext: currentContext];

关于objective-c - NSManagedObject 的自定义初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10489578/

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