Почему awakeFromInsert вызывается дважды?

Я реализовал awakeFromInsert установить некоторые значения по умолчанию и отношения в моих основных объектах данных. Однако метод вызывается дважды, а это означает, что добавляемые мной значения to-many добавляются несколько раз.

Я использую родительский и дочерний контексты управляемых объектов.

Что дает?

2 ответа

Решение

awakeFromInsert будет вызываться при вставке объекта в его начальный контекст. Когда этот контекст сохраняется и изменения передаются в родительский контекст, он будет вызван снова.

Вы можете запросить self.managedObjectContext свойство для определения, в каком случае вызывается метод. В зависимости от вашего конкретного случая использования вы можете проверить наличие или отсутствие parentContext и действовать соответственно.

Благодаря помощи jrturton:

здесь самый простой: когда parentContext имеет значение null, означает, что при сохранении этого контекста вы можете использовать собственную логику, например, увеличивая номер таблицы

- (void)awakeFromInsert
 {

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

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

 }
Другие вопросы по тегам