У меня есть приложение с двумя настройками контекста управляемого объекта:
- Контекст родителя: 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 не может выполнить ошибку для...".