Использование NSFetchedResultsController без UITableViewController - PullRequest
4 голосов
/ 19 июля 2010

У меня проблемы с попыткой использовать NSFetchedResultsController без соответствующего UITableViewController.

Согласно яблокам Документация :

"NSFetchedResultsController предназначен для эффективного управления результатами, возвращаемыми из запроса на выборку Core Data для предоставления данных для объекта UITableView."

Итак, я сначала выяснил, было ли целесообразно использовать NSFetchedResultsController без UITableViewController и встретил этот пост Stackoverflow , где делается вывод, что, по крайней мере, в некоторых обстоятельствах, это неплохая идея.

Но теперь я столкнулся с проблемой, когда NSFetchedResultsController ведет себя по-разному, когда соответствующий UITableViewController отсутствует. Проблема в том, что когда UITableViewController отсутствует, объекты, возвращаемые NSFetchedResultsController, не имеют IndexPaths. Я задокументировал эту проблему в сообщении stackoverflow . (Обратите внимание, что это упрощение проблемы, в некоторых случаях объекты имеют IndexPaths, но я столкнулся с достаточным количеством проблем, чтобы полагать, что ожидание IndexPaths без UITableViewController - плохая идея.)

Без IndexPaths я не могу получить доступ к возвращенным объектам в порядке их сортировки и не могу получить доступ к определенным объектам. Так что я ищу либо способ заставить контроллер NSFetchedResults возвращать объекты с помощью IndexPaths, либо альтернативный способ доступа к объектам. (Или, возможно, мне вообще не следует использовать NSFetchedResultsController?)

В отношении альтернативных методов, одним из обходных путей будет передача fetchedObjects в массив, а затем работа с этим массивом. Но по моему опыту создание новых указателей на объекты FRC всегда вызывает проблемы. Я думаю, что каждый раз, когда я пытался сохранить NSManagedObject с моими собственными указателями, это в конечном итоге вызывало ошибку.

К вашему сведению, я пытаюсь создать панель навигации, аналогичную панели навигации в Фото. Если бы вы представили, что можете динамически добавлять фотографии в приложение «Фотографии», то было бы целесообразно, чтобы фотографии на панели управлялись NSFetchedResultsController - чтобы добавление новой фотографии динамически добавлялось в конец панели, как как добавление нового объекта динамически добавляется в UITableView.

Спасибо за любые идеи, с которыми вы можете мне помочь!

ОБНОВЛЕНИЕ эта проблема (предварительно) решена с помощью - [NSFetchedResultsController fetchedObjects] objectAtIndex:]

Ответы [ 3 ]

4 голосов
/ 23 июля 2010

Это решается с помощью - [NSFetchedResultsController fetchedObjects] objectAtIndex:]

NSFetchedResultsController ведет себя как набор управляемых объектов, аналогично NSArray, что упрощает его использование. Фактически, он предоставляет доступное только для чтения свойство fetchedObjects, которое имеет тип NSArray, чтобы упростить доступ к объектам, которые он получает.

3 голосов
/ 19 июля 2010

Что-то не так с работой с -[NSFetchedResultsController fetchedObjects]? Я не совсем уверен, что вы имеете в виду, когда говорите, что сталкиваетесь с проблемами при создании новых указателей и сохранении их - не могли бы вы объяснить больше? Обычно вам не нужно сохранять NSManagedObject s (они извлекаются и сбрасываются по мере необходимости), так что это может быть проблемой.

1 голос
/ 19 июля 2010

(Обратите внимание, это упрощение вопрос, при некоторых обстоятельствах объекты имеют IndexPaths, но я столкнулся с достаточным количеством проблем, чтобы поверить что ожидал IndexPaths без UITableViewController - плохая идея.)

И UITableView, и NSFetchedResultsController используют расширения NSIndexPath UIKit Additions для NSIndexPath. Этот расширенный класс генерирует indexPaths с явным атрибутом section и row. Эти пути должны быть созданы вручную, используя:

+[NSIndexPath indexPathForRow:inSection:]

Если вы используете другие методы для создания indexPath, получатели должны вывести атрибуты раздела и строки. Обычно они выводят правильно, но вероятность ошибки остается.

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