FetchedResultsController и UITableView в нескольких представлениях - PullRequest
1 голос
/ 26 декабря 2010

Сводка: у меня есть два разных представления, которые используют таблицы для отображения результатов из выбранного контроллера результатов.Эти таблицы могут содержать те же данные .Я получаю ошибки при перемещении строк в одной таблице после загрузки другой таблицы.(Полагаю, очевидно!)

Для упрощения представьте, что сущность состоит из стран, а другая сущность объединяет эти страны в группы стран.У нас есть представление «editSet», которое позволяет вам называть набор, добавлять или удалять страны в наборе, а также изменять их порядок, используя стандартный пользовательский интерфейс.Затем у нас есть представление «viewSet», которое показывает вам эти страны и некоторую стоимость, связанную с ними (например, обменный курс или что-то еще).

Теперь, в представлении редактирования, когда мы изменяем порядок и вызывается moveRowAtIndexPath, яустановить BOOL, который останавливает любые дальнейшие изменения пользовательского интерфейса, пока coredata не будет обновлен (каждая запись имеет целочисленное значение displayOrder, которое я обновляю перед выполнением другого executeSearch).Все это прекрасно работает, если вы только создали экземпляр представления «editSet».

Если что-то пойдет не так, если вы загрузите «viewSet», затем загрузите «editSet» с тем же набором и переместите строки.BOOL, который мы устанавливаем в editSet, не передается viewSet (который также «наблюдает» за coredata) и расстраивается, когда coredata изменяется программно.Это генерирует:

Serious application error.  An exception was caught from the delegate of
NSFetchedResultsController during a call to -controllerDidChangeContent:
.  *** -[NSMutableArray removeObjectAtIndex:]:
index 0 beyond bounds for empty array with userInfo (null)

И все разрывы ада теряются.

С другой стороны, если я загружаю / показываю «viewSet» с РАЗЛИЧНЫМ НАБОРОМ для того, который я редактирую, проблем нет.

Итак, что мне нужно сделать, это ЛИБО "отключить" FRC и таблицу при выходе из viewSet (возможно, выполнить поиск по пустому адресу и перезагрузить таблицу?) ИЛИ передать BOOL в viewSetController при сохранениипереместил строки в coredata в editSet, чтобы имитировать то, что я делаю локально в этом viewcontroller (не совсем уверен, как это сделать, но я думаю, выполнимо).

Я уверен, что я не первый, кто столкнулся с этой проблемой, поэтомуинтересно, как лучше?

1 Ответ

0 голосов
/ 26 декабря 2010

Используйте другой контекст управляемого объекта для ваших "правок", а затем объедините их, когда вернетесь к своему "viewSet".Загляните в пример проекта кода Apple «CoreDataBooks», чтобы увидеть, как вы можете использовать два контекста для выполнения несвязанного редактирования.

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