2013-11-08 4 views
3

Я применил awakeFromInsert, чтобы установить некоторые значения по умолчанию и отношения в моих основных объектах данных. Тем не менее, метод вызывается дважды, это означает, что добавляемые множимые значения добавляются несколько раз.Почему awakeFromInsert вызывается дважды?

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

Что дает?

+1

являются вы называете '[super awakeFromInsert];'? –

+0

Я не был, спасибо за это, но он все еще называет это дважды. – jrturton

ответ

7

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

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

+1

Я единственный, кто думает, что это ошибка? Не уверен, что это на стороне вашего или Яблока, но [документация 'awakeFromInsert'] (https://developer.apple.com/library/mac/documentation/cocoa/reference/CoreDataFramework/Classes/NSManagedObject_Class/Reference/NSManagedObject. html # // apple_ref/occ/instm/NSManagedObject/awakeFromInsert) явно говорит, что этот метод вызывается только один раз в жизни объекта. –

+1

Вы не единственный - см. Http://lists.apple.com/archives/cocoa-dev/2011/Nov/msg00734.html для более подробного обсуждения. Я задаю этот вопрос для видимости, поскольку этот поток довольно старый. Документация является «правильной» в том смысле, что «self» - это другой объект в каждом контексте. – jrturton

+0

Спасибо за долю;) –

0

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

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

- (void)awakeFromInsert 
{ 

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

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

} 
Смежные вопросы