Когда пользователь дважды нажимает на представление в моем приложении, контроллер uipopover предоставляет ему поля, которые он может редактировать.(Очень похоже на приложение календаря для iPad)
Представление представляет собой объект NSmanagedobject.Чтобы иметь возможность отменить операции, выполняемые в контроллере uipopover, моя идея заключалась в следующем:
1) создать «editManagedObjectContext» в моем viewcontroller для всплывающего окна и дать ему постоянный координатор хранилища моего основного контекста, используемого в моем приложении.
editContext = [[NSManagedObjectContext alloc] init];
[editContext setPersistentStoreCoordinator:[myContext persistentStoreCoordinator]];
2) извлечь объект, представленный в повернутом виде (Задача *), из нового "editContext"
task = [editContext objectWithID:[taskOrNilForNewTask objectID]];
3) Используйте эту задачу, чтобы выполнить все редактирование и когдапользователь завершает, он может либо:
- Отменить всю операцию редактирования.Это просто отбрасывает editContext и возвращает.
- Сохранить.Это могло бы объединить editcontext с исходным контекстом через
mergeChangesFromContextDidSaveNotification :
. Таким образом, зафиксировав изменения в соответствующей задаче в исходном контексте.
Проблема в том, что task = [editContext objectWithID:[taskOrNilForNewTask objectID]];
приводит к поврежденному объекту.И позже, когда я пытаюсь получить доступ к свойствам объекта задачи, я получаю либо ошибку BAD_EXC, либо мой объект задачи, кажется, имеет какой-то странный тип в диапазоне от: CALayer, NSCFData, ...
Моя мысль былачто мне, возможно, придется сначала сохранить исходный контекст, но это приводит к примерно таким же ошибкам.Но так как я сохранил непосредственно перед созданием editContext, я подумал, что операция сохранения может быть выполнена в другом потоке, и это может быть причиной?
Я просто не могу понять, что я делаю неправильно, инадеюсь, что вы, ребята, можете дать какой-нибудь совет.
Мой подход был основан на подходе из примера кода CoreDataBook от Apple (rootviewcontroller.m - (IBAction) addBook:)