Подходит ли для моего приложения несколько контекстов управляемых объектов? Я шел по этому маршруту (передавая свой MOC от одного экземпляра подкласса UIViewController к следующему), но я начинаю сталкиваться с ошибками EXC_BAD_ACCESS и мне интересно, может ли это быть связано.
Итак, когда я хочу использовать несколько ManagedObjectContexts и (когда) я должен использовать только один?
Edit:
В моем приложении, основанном на UISplitViewController
, при удалении строки в моем главном представлении только после представления второго представления в основном подробном представлении мой контроллер подробного просмотра аварийно завершает работу на respondsToSelector
, который я не звони никогда.
Редактировать 2:
По сути, у меня есть основной вид и подробный вид. В подробном представлении пользователь нажимает кнопку. Кнопка вызывает вид «новая транзакция». Вместо того, чтобы представлять вид модально, я вручную добавляю его в детальный вид. Если пользователь вносит изменения в контекст управляемого объекта в этом новом представлении, а затем пытается удалить строку в главном представлении, это вызывает сбой. Если я представлю тот же вид модально, все работает просто отлично.
Кроме того, NSZombieEnabled говорит, что метод respondsToSelector
вызывается в (родительском) подробном представлении. Я не называю это нигде в моем приложении. Может ли это быть проблема с памятью? Потоковая проблема? Я явно не создаю никаких новых потоков, но я не знаю, есть ли какие-либо потоки, созданные за кулисами.
В чем может быть проблема?
РЕДАКТИРОВАТЬ3:
Эта проблема, кажется, становится лучше. В моем подробном представлении у меня также есть таблица, в которой, как и в главном представлении, используется контроллер NSFetchedResults. Когда я удаляю ячейку, я также скрываю подробный вид, который вызывает ее освобождение. Выпуск подробного представления приводит к сбою приложения. Если я не удаляю подробное представление, транзакции в таблице подробного представления удаляются. (Это потому, что у меня базовые данные установлены каскадно при удалении учетной записи.)
Итак, возможно, у меня слишком много NSFetchResultsController
объектов? Я считаю, что происходит следующее:
Когда я удаляю строку, значение NSFetchResultsController изменяется, и поэтому он пытается запустить метод делегата. Тем не менее, подробный вид был удален, и его контроллер представления освобожден. Таким образом, система делегатов запускает метод controllerDidChange и вылетает при попытке доставить уведомление в подробный вид.
Как я могу это исправить?