根据文件:
您不应该覆盖init。不鼓励您覆盖initWithEntity:insertIntoManagedObjectContext:
你应该使用awakeFromInsert或awakeFromFetch。
如果我想要做的就是将某个属性设置为当前日期或类似日期,那么这很好,但如果我想发送另一个对象并根据其信息设置属性该怎么办?
例如,在名为“Item”的NSManagedObject子类中,我想要一个initFromOtherThing:(Thing *)的东西,其中项目的名称设置为该东西的名称。我想避免“只需记住”在创建项目后立即设置名称,并且当我决定我希望Item还根据Thing设置另一个默认属性时,必须更新十五个不同的控制器类。这些是与模型相关的行动。
我打算如何解决这个问题?
答案 0 :(得分:1)
我认为处理此问题的最佳方法是通过继承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];