Почему UITableView теряет ManagedObjectContext после возвращения из ModalView? - PullRequest
2 голосов
/ 10 июля 2011

Я создал оконное приложение со следующим

  • TableViewController (без файла XIB)
  • a ViewController (с файлом XIB) <- для использования в качестве модального представления </li>
  • модель CoreData для хранения некоторых данных

Мне удалось загрузить приложение и заполнить TableView данными из Entity, и я смог без проблем прокрутить все ячейки TableView.

Я добавил элемент UIBarButton (rightBarButton), который заставляет модальное представление появляться для ввода пользователем некоторых данных. Вид модели имеет кнопки СОХРАНИТЬ и ОТМЕНА.

Проблема в том, что когда я нажимаю кнопку «Отмена», я возвращаюсь к TableView, но если я пытаюсь прокрутить элементы таблицы, происходит сбой приложения.

После 4 часов поиска в Google и StackOverflow я не смог понять, почему мое приложение вылетало. Однако я заметил, что отладчик установил для ManagedObjectContext значение NIL во второй раз, когда я прокручиваю просмотр таблицы (после закрытия модального окна), хотя данные не изменяются и не происходит вставка / удаление.

Я попытался использовать таймер для вызова reloadData, так как нашел ответы на StackOverflow, но это не сработало. Я попытался установить ManagedObjectContext как свойство с помощью retain и удалил все вхождения [myManagedObjectContext release], чтобы избежать его выпуска раньше, чем необходимо, но это не помогло.

Кажется, я делаю очевидную ошибку, но я не уверен, где.

Пожалуйста, помогите.

1 Ответ

3 голосов
/ 11 июля 2011

ивары не становятся nil только потому, что они выпущены где-то еще (по крайней мере, в iOS 4.3).Таким образом, перевыпуск не является конкретной причиной того, что myManagedObjectContext станет nil.Предполагая, что вы используете аксессоры для ссылки на свои ивары (и так и должно быть), вручную внедрите setManagedObjectContext: и установите там точку останова, чтобы увидеть, кто ее вызывает.Кроме того, вы можете добавить точку наблюдения GDB к myManagedObjectContext, чтобы увидеть, когда память изменяется.

Вы не указали, что такое стек аварийного завершения при сбое.Вы должны сосредоточиться на том, к какой памяти вы обращаетесь в момент сбоя, и убедиться, что сбой вызван нарушением памяти, а не исключением.Проверьте выходные данные отладчика.Часто он скажет вам, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...