У меня есть сущность A, которая имеет отношение ко многим с сущностью B вместе с соответствующей обратной взаимосвязью.
Я добавляю объекты B в A следующим образом:
NSMutableSet *bSet = [aObj mutableSetValueForKey:@"B"];
for (bData in some array) {
[ create and insert bObj within SAME context ];
[bSet addObject:bOjb];
}
[context insertObject:aObj];
[context save:&err];
Это прекрасно работает в однопотоковой ситуации или в двухпоточной ситуации, используя один NSManagedObjectContext в обоих потоках (что, безусловно, ПЛОХО, но я только что тестировал).
Но как только я пытаюсь создать необходимый второй NSManagedObjectContext для фонового потока, который вставляет объекты A & B, эта информация об отношениях, кажется, не сохраняется.Объекты A и B определенно есть, но между ними нет никакой связи.
Вот как я создаю 2-й MOC:
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[(AppDelegate*) [UIApplication sharedApplication].delegate persistentStoreCoordinator]];
Обратите внимание, что я получаю доступ к Базовым данным в основном потоке и вставляю их в фоновом потоке.Я использовал mergeChangesFromContextDidSaveNotification
в контексте основного потока из NSManagedObjectContextDidSaveNotification
, но это, похоже, ничего не дало.
ОБНОВЛЕНИЕ:
Это выглядиткак это было проблемой, когда я выпускал MOC слишком рано / ненадлежащим образом.Простое комментирование выпуска привело к тому, что проблема исчезла, но немного переписала управление памятью, чтобы контекст исправил ее правильно.