У меня есть общий шаблон приложения: пользователь вводит данные в контроллер основного представления, а затем просматривает их в таблице в контроллере модального представления, где строки могут быть удалены или изменены. Я следовал общей стратегии дизайна из Стэнфордского курса iPhone, но где-то все пошло не так, и все, что я получил, - это SIGABRT и исключения вроде «Незаконная попытка установить связь 'xyz' между объектами в разных контекстах».
Как и в Стэнфордском курсе, я использую одноэлементный класс под названием «База данных», который должен возвращать тот же контекст при каждом запросе. Итак, первые команды в моем методе viewDidLoad на главном контроллере представления:
dbsingleton = [Database sharedInstance];
nmocontext = [dbsingleton managedObjectContext];
nmocontext - это ivar, который я использую во всем контроллере представления. Когда пользователь хочет увидеть другой контроллер представления с таблицей, я выделяю-инициализирую его, а затем представляю модально. (У него есть NSFetchedResultsController, который предоставляет данные из моего магазина.) Я пробовал здесь различные стратегии:
- Я сделал NSFetchedResultsController сохраняемым свойством, установленным главным контроллером представления.
- Я сделал NSManagedObjectContext сохраняемым свойством, установленным главным контроллером представления; и
- Я использовал синглтон внутри, повторяя эти две строки кода выше в начале метода viewDidLoad контроллера табличного представления.
Что бы я ни выбрал, одна проблема, которую я просто не могу решить, заключается в том, что после того, как пользователь закрывает и освобождает контроллер представления таблицы (и его NSFetchedResultsController), я начинаю получать сбои в контроллере основного представления при доступе к хранилищу (например, " Незаконная попытка "ошибка, упомянутая выше).
Каковы наилучшие методы работы с этим распространенным шаблоном приложения? Я все еще надеюсь сделать это приложение совместимым с iPhone SDK 3.x, но, похоже, у меня меньше сбоев, когда я использую iOS 4 - если есть основные проблемы с 3.x, которые вызывают у меня проблемы, пожалуйста, позвольте мне знаю, и я могу настроить таргетинг только на iOS 4.
Спасибо!