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