Поскольку мое приложение является многопоточным, я использую два NSManagedObjectContexts. Основной контекст, который запускается в основном потоке, и другой контекст, который выполняется только в отдельном потоке.
Я создал небольшое тестовое приложение. У него есть два основных объекта данных. Родитель и ребенок. Родитель имеет отношение один-ко-многим с ребенком. Ребенок имеет отношение 1-1 к родителю.
В одном методе тестирования (который выполняется в отдельном потоке) я получаю экземпляр Parent, который был создан во время выполнения ранее. Так что это в основном контексте. Я получаю этого родителя с этой строкой кода:
Parent *tmpParent = [[parentController selectedObjects] objectAtIndex:0];
Затем я создаю несколько дочерних элементов в контексте потока ( managedObjectContextInBackground ), устанавливаю для их родителя значение tmpParent, даю им имя и сохраняю контекст потока:
Child *child1 = (Child *)[NSEntityDescription insertNewObjectForEntityForName:@"Child" inManagedObjectContext:managedObjectContextInBackground];
[child1 setName:@"Homer"];
[child1 setParent:tmpParent];
Child *child2 = (Child *)[NSEntityDescription insertNewObjectForEntityForName:@"Child" inManagedObjectContext:managedObjectContextInBackground];
[child2 setName:@"Wilma"];
[child2 setParent:tmpParent];
[self saveManagedObjectContextInBackground];
Если я выполняю этот метод, приложение вылетает и говорит:
Незаконная попытка установить «родительскую» связь между объектами в разных контекстах
Вот почему я добавил эту строку ниже объявления tmpParent:
[managedObjectContextInBackground insertObject:tmpParent];
Но приложение снова вылетает, говоря:
NSManagedObject может быть только (или наблюдаться) одним NSManagedObjectContext
Я просмотрел документацию, но не смог найти способ решить эту проблему.
Вопрос: Как я могу установить отношение Child к Parent, когда Parent находится в другом NSManagedObjectContext, чем Child ??