NSFetchedResultsController / NSFetchRequest против отношения NSManagedObject ко многим - PullRequest
2 голосов
/ 30 августа 2011

Я представляю иерархию NSManagedObject (в основном три уровня) с различными контроллерами представления на iOS.Проблема, которую я не совсем понимаю, заключается в том, что если для каждого из контроллеров представления требуется NSFetchedResultsController.Для контроллера корневых представлений это кажется удобным, но представления, которые следуют за этим, основаны на выборе в предыдущем представлении.Как насчет NSFetchRequest по сравнению с прямыми отношениями?Отображаемые данные являются статическими и никогда не изменятся, поэтому нет необходимости готовиться к обновлениям.Он будет загружен из файла sqlite базовых данных.

Вот простой график того, что у меня есть:

A (1) <---> (*) B (1) <---> (*) C

Так что оба A - B и B - C отношения один-ко-многим, и в корневом представлении я отображаю список A s.Выбор одного A отобразит его B s в следующем контроллере представления и т. Д.

Есть ли какая-либо разница, выбираю ли я экземпляры B с помощью NSFetchRequest (или NSFetchedResultsController) или просто использовать отношение ко-многим в A?Есть ли разница в объеме памяти или в ситуациях, когда память заканчивается?Я понимаю, что всегда могу отдать контроллер выборки, когда didReceiveMemoryWarning, но с управляемыми объектами я думаю, что это не так просто.Это так?Я хотел бы использовать прямые отношения.

Заранее спасибо.

1 Ответ

0 голосов
/ 30 августа 2011

Есть разница, но вам не о чем беспокоиться, если у вас нет тысяч B и C для каждого A.

Если вы используете отношение, вы получите NSSet назад - это не будет использоватьNSFetchedResultsController.Тем не менее, объекты, к которым вы вернетесь, на самом деле не будут содержать никаких данных, все они начнут работать как неисправности, поэтому объем памяти довольно мал.Они получают свои данные только после того, как вы их попросите:)

И если вы получите предупреждение о нехватке памяти, вы можете заставить управляемые объекты снова стать неисправными, перезагрузив их из контекста (см. документы здесь ).

...