为什么awakeFromInsert被调用两次?

时间:2013-11-08 09:56:22

标签: objective-c cocoa-touch cocoa core-data

我已实现awakeFromInsert在核心数据对象中设置一些默认值和关系。但是,该方法被调用两次,这意味着我添加的to-many值被多次添加。

我正在使用父和子托管对象上下文。

是什么给出的?

2 个答案:

答案 0 :(得分:8)

将对象插入其初始上下文时,将调用

awakeFromInsert。保存此上下文并将更改推送到父上下文时,将再次调用它。

您可以查询self.managedObjectContext属性以确定调用该方法的情况。根据您的特定用例,您可能需要检查是否存在parentContext并采取相应措施。

答案 1 :(得分:0)

感谢jrturton的帮助:

这是最简单的一个: 当parentContext为null时,表示保存此上下文时,您可以自定义逻辑,例如递增表号

- (void)awakeFromInsert
 {

     if (!self.managedObjectContext.parentContext) {
         //setting tableNumber

         [self willChangeValueForKey:@"number"];
         [self setPrimitiveNumber:tableNumber];
         [self didChangeValueForKey:@"number"];
    }

 }