Ответ 1
Ответьте на некоторые вопросы:
1) Наличие нескольких кэшей не является проблемой. Фактически, из справочника Apple:
- Если у вас есть несколько выбранных контроллеров результатов с разными конфигурации (разные дескрипторы сортировки и т.д.), вы должны дать каждое другое имя кеша.
У меня были проблемы с предыдущими приложениями, где я не делал этого только для получения исключения, которое я потратил впустую на время, пытаясь решить.
2) Мы должны использовать кеш для хранения любой повторяющейся работы, которую должен выполнять NSFetchedResultsController. При изменении раздела или информации о заказе кеш обновляется. Аналогично, если кеш не соответствует текущей информации в базе данных (вы добавили новую строку, удалили и т.д.), Тогда контроллер освободит кеш и очистит его.
3) Я лично поместил deleteCacheWithName в метод viewDidUnload. Не уверен, что это лучшее место или нет.
Не уверен насчет 4. Что касается перестройки кеша - это должно произойти автоматически, если текущий кеш не синхронизирован с приложением. Я не сделал ничего конкретного для управления памятью и кеша в любом из моих приложений.
5) Это не должно быть проблемой. Опять же, из документации Apple:
- Если вы установите делегат для выбранного контроллера результатов, регистры контроллера для получения уведомлений об изменениях из управляемых контекст объекта. Любое изменение в контексте, которое влияет на набор результатов или информация о секциях обрабатывается, и результаты обновляются соответственно. Контроллер уведомляет делегата, когда объекты результата изменить местоположение или изменить разделы (см. NSFetchedResultsControllerDelegate). Обычно вы используете эти методы для обновления отображения табличного представления.
FYI, вот ссылка на apple dev docs для этого класса: http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html
НТН