Базовые данные :Получают ли дочерние контексты постоянные идентификаторы объектов для вновь вставленных объектов?

У меня есть приложение с двумя настройками контекстов управляемых объектов, подобным этому:

  • Родительский контекст :NSPrivateQueueConcurrencyType, связанный с постоянным хранилищем.
  • Основной контекст :NSMainQueueConcurrencyType, дочерний элемент родительского контекста.

При вставке нового управляемого объекта в основной контекст я сохраняю основной контекст, а затем родительский контекст следующим образом:

[context performBlockAndWait:^{
    NSError * error = nil;
    if (![context save: &error]) {
        NSLog(@"Core Data save error %@, %@", error, [error userInfo]);
    }
}];

[parentContext performBlock:^{
    NSError *error = nil;
    BOOL result = [parentContext save: &error];
    if ( ! result ) {
        NSLog( @"Core Data save error in parent context %@, %@", error, [error userInfo] );
    }
}];

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

Так:

  • Возвращается ли постоянный идентификатор объекта автоматически обратно в основной (дочерний )контекст?
  • Когда я заставляю получить постоянный идентификатор объекта с помощью [NSManagedObjectContext obtainPermanentIDsForObjects:error:], затем фоновое приложение, повторная активация, перезагрузка, получение объекта с использованием основного контекста objectWithID:и доступ к свойству, я получаю

    "CoreData could not fulfill a fault for...".

Что не так с этим подходом?
29
задан Mundi 16 August 2012 в 15:26
поделиться