Сохраните кэш NSFetchResultsController после закрытия приложения - PullRequest
0 голосов
/ 05 марта 2012

Я работаю над проектом Core Data, который обрабатывает более 150000 записей.Записи отображаются в табличном представлении с использованием NSFetchedResultsController.Записи должны быть отсортированы с использованием различных атрибутов моей сущности.

Чтобы приложение чувствовало себя быстро, я создал несколько NSFetchedResultsController с различными дескрипторами сортировки, чтобы показать соответствующие отсортированные результаты.Я инициализирую FRC при запуске моего приложения и заставляю пользователей ждать, пока инициализируются FRC.После этого, когда пользователь изменяет ключ сортировки, я просто заменяю текущий FRC на новый для ключа сортировки, и, следовательно, сортировка чувствует мгновенным.

Приложение работает нормально, когда ононаходится в оперативной памяти.Но инициализация при уничтожении и перезапуске занимает около 15-20 секунд (iPad 1).

Есть ли способ сохранить кэшированные данные FRC на диск при выходе из приложения и восстановить его после завершения работы приложения?возобновлен?Или есть лучший обходной путь?

1 Ответ

1 голос
/ 05 марта 2012

Хм ... если вы укажете имя кэша, NSFetchedResultController уже должен был быть сохранен на диск, поэтому я думаю, что многое зависит от того, как вы инициализируете контроллер.

В любом случае все извлеченные кэши контроллера сохраняются в

"AppSandbox" /Library/Caches/.CoreDataCaches/SectionInfoCaches/

и я не думаю, что они удаляются после закрытия приложения. Попробуйте поиграть с этим, вы можете легко получить доступ к папке библиотеки с:

[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];

Но я читал, что, когда контроллер обнаружил, что кэш с тем же именем, что и у него, был инициализирован, он проверяет, соответствует ли он по-прежнему, и затем обновляет его, вероятно, с огромным количеством данных, на обновление кеша уходит немного времени. Информация. Подумайте об использовании NSOperation для загрузки извлеченного контроллера и ускорения работы. Возможно, начнем с того, который отображается по умолчанию.

...