На оригинальный вопрос дан ответ. Обновление адресов, связанных с вопросом, поднятым в комментариях.
Оригинальный пост:
Я использую метод сохранения MOC, используемый в Apple CoreDataBooks . Однако мне кажется, что я использую два уровня слияния MOC (три MOC, где 3-й сливается с 2-м, а затем 2-й сливается с 1-м).
Во-первых, у меня есть таблица (ClassList), в которой перечислены школьные занятия. Выбор класса выдвигает 2-рядное табличное представление (AddClass). В AddClass первая строка позволяет пользователю редактировать заголовок класса. При выборе второй строки отображается табличное представление (ClassRoster), в котором отображается список учеников для этого класса. И, наконец, выбор ученика помещается в другой двухстрочный просмотр таблицы (AddStudent), где пользователь может редактировать имя ученика и имя пользователя.
Я могу успешно добавлять и сохранять классы с помощью метода слияния с двумя MOC (managedObjectContext и добавление ManagedObjectContext, используемого CoreDataBooks). Я назову «базовый MOC» в моем первом представлении «MOC1» и назову «блокнот» MOC «MOC2».
MOC2 временно сохраняет изменения, внесенные в объект класса. Затем эти изменения можно сохранить или отменить, отправив делегату -didFinishWithSave:(BOOL)
. Если я сохраню изменения, сделанные в MOC2, объединятся с MOC1. Это слияние работает отлично.
Обработка изменений, внесенных в объекты учеников, - вот где я ошибаюсь. Я думал, что смогу использовать MOC3 в качестве блокнота для изменений объектов учеников, которые сливаются с MOC2 (когда я сохранял объект ученика). MOC2, в свою очередь, может быть сохранен с MOC1, когда я сохранил объект класса.
Но я столкнулся с ошибками при сохранении MOC3 и добавлении объектов учеников в объекты классов, потому что они находятся в разных контекстах. Я могу опубликовать код, но сначала я хотел задать более крупный вопрос: Я все об этом говорю неправильно
UPDATE:
г. Zarra рекомендовал использовать initWithEntity:insertIntoManagedObjectContext:
и установить MOC равным nil, создав тем самым временный объект, который впоследствии мог бы установить и сохранить MOC.
Следуя его совету, я пытаюсь ввести следующий код:
NSManagedObjectModel *managedObjectModel - [[managedObjectContext persistentStoreCoordinator] managedObjectModel];
NSEntityDescription *entity = [[managedObjectModel entitiesByName] objectForKey:@"MyClass"];
MyClass *newClass = [[MyClass alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
Я столкнулся с ошибкой, но пока не уверен, что она связана с этим кодом. Я буду отлаживать и публиковать то, что я нахожу.