На следующий код:
CustomObject *customObject = [[CustomObject alloc] initWithContext:self.persistentContainer.viewContext];
customObject.name = @"TEST";
customObject.customID = 1234;
NSManagedObjectContext *firstContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
firstContext.parentContext = self.persistentContainer.viewContext;
CustomObject *contextObj = [firstContext objectWithID:customObject.objectID];
NSError *error;
[self.persistentContainer.viewContext save:&error];
NSLog(@"ERROR [%@", error);
NSLog(@"NAME [%@]", contextObj.name);
Я получаю результат:
ERROR [(null)
[error] error: API Misuse: Attempt to serialize store access on non-owning coordinator (PSC = 0x6000015fa300, store PSC = 0x0)
CoreData: error: API Misuse: Attempt to serialize store access on non-owning coordinator (PSC = 0x6000015fa300, store PSC = 0x0)
NAME [(null)]
Я пытаюсь понять, почему появляется это предупреждение. Я ожидаю, что после сохранения основного контекста я все еще смогу получить доступ к свойству объекта в его дочернем контексте без каких-либо проблем.
Интересная часть заключается в том, что, если перед сохранением основного контекста я сбросил значение contextObj, все работает нормально:
CustomObject *customObject = [[CustomObject alloc] initWithContext:self.persistentContainer.viewContext];
customObject.name = @"TEST";
customObject.customID = 12234;
NSManagedObjectContext *firstContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
firstContext.parentContext = self.persistentContainer.viewContext;
CustomObject *contextObj = [firstContext objectWithID:customObject.objectID];
NSError *error;
NSLog(@"NAME [%@]", contextObj.name);
[self.persistentContainer.viewContext save:&error];
NSLog(@"ERROR [%@", error);
NSLog(@"NAME [%@]", contextObj.name);
NAME [TEST]
ERROR [(null)
NAME [TEST]
Любые идеи о том, почему это происходит, будут оценены.
Спасибо.