5
votes

I have implemented awakeFromInsert to set some default values and relationships in my core data objects. However, the method is being called twice, meaning that the to-many values I am adding are being added multiple times.

I am using parent and child managed object contexts.

What gives?

2
are you calling [super awakeFromInsert];?Matthias Bauch
I wasn't, thanks for that, but it still calls it twice.jrturton

2 Answers

12
votes

awakeFromInsert will be called when you insert the object into its initial context. When this context is saved and the changes are pushed up to the parent context, it will be called again.

You can query the self.managedObjectContext property to determine which case the method is being called for. Depending on your particular use case, you may want to check for the presence or absence of a parentContext and act accordingly.

0
votes

thanks to jrturton help:

here is the simplest one: when parentContext is null, means when this context is saved you can do you custom logic, for example incrementing table number

- (void)awakeFromInsert
 {

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

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

 }