Обновление NSManagedObject вызывает удаление NSFetchedResultsController - PullRequest
1 голос
/ 24 апреля 2011

У меня довольно неприятная проблема, с которой я долго боролся.

Для обеспечения некоторого контекста и детализации у меня есть приложение iOS UISplitViewController для iOS - стандартный материал мастера / детализации. Основным представлением является UITableView, поддерживаемый NSFetchedResultsController (который загружает NSManagedObjects из хранилища данных SQLite).

Кажется, что происходит то, что любое обновление в подробном представлении (которое может регулярно вызывать обновления «основных записей» и сбрасывается в NSManagedObject и, в конечном итоге, в хранилище данных SQL), вызывает операцию DELETE в NSFetchedResultsController.

Я предполагаю, что это потому, что запись в свойство (свойства) NSManagedObject вызывает какую-то ошибку, которая, в свою очередь, заставляет NSFetchedResultsController удалить его из кэшированного результирующего набора. Конечный результат состоит в том, что записи пропадают из основного представления (например, UITableCellView удаляются из основного UITableView).

Проблема в том, что я не хочу, чтобы это произошло, и я понятия не имею, как это остановить ...

Кто-нибудь сталкивался с этой проблемой раньше и может дать какие-то рекомендации?

Заранее спасибо, Бен

1 Ответ

0 голосов
/ 25 апреля 2011

Я не уверен, что это ответит на ваш вопрос, но я нашел решение аналогичной проблемы, с которой столкнулся. Я сортировал объекты в своем UITableView, поддерживаемом основными данными, по первой букве имени каждого объекта. В любом учебном пособии, которое я читал, мне было предложено поместить временное свойство NameInitial в подкласс NSManagedObject, которое я бы заполнил первой буквой имени этого объекта. Затем я использовал это свойство в качестве моего sectionNameKeyPath, чтобы отсортировать объекты по соответствующим разделам в моем UITableView.

У меня была кнопка в каждой ячейке, которая обновляла свойство объекта, связанного с этой ячейкой, и я правильно получил сообщения NSFetchedResultsChangeUpdate в моей делегатской функции didChangeObject. ОДНАКО, иногда, ячейки удаляются, и я получаю сообщение NSFetchedResultsChangeDelete без видимой причины.

Затем я заметил, что удаляемые ячейки имеют (нулевое) свойство NameInitial для своего связанного объекта. Я забыл, что временный NameInitial хранится только в памяти, и поэтому не всегда поддерживается постоянно. Как только я вручную заполнял свойство NameInitial при каждом обновлении ячейки, удаление прекращалось. Так что, если вы используете временное свойство, чтобы помочь отсортировать / разделить ваш UITableView, это может быть вашей проблемой.

Надеюсь, это поможет, и удачи! -Rick

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