У меня есть приложение с двумя настройками контекстов управляемых объектов, подобным этому:
При вставке нового управляемого объекта в основной контекст я сохраняю основной контекст, а затем родительский контекст следующим образом:
[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...".