Базовые Данные с хранилищем в оперативной памяти

Приостановить и перезапустить Reshaper работал. Проблема была решена.

6
задан diederikh 7 November 2009 в 18:08
поделиться

1 ответ

Ваш первый вопрос предполагает, что вы неверно истолковали намерение постоянных хранилищ типа NSInMemoryStore . Они представляют собой постоянное хранилище стека Core Data. Ошибка - это то, что происходит, когда вы переносите экземпляры в контекст управляемого объекта; создается ошибка, которая срабатывает и заполняется из кэша NSPersistentStoreCoordinator или основного постоянного хранилища при срабатывании. Хранилище в памяти не меняет отношения сбоя. Очевидно, это не поможет решить вашу проблему, однако, поскольку вам придется сохранить все данные в памяти. Хранилища в памяти действительно подходят для (1) тестирования (они быстрые) и (2) скретч-стека основных данных, в которых вы хотите использовать Core Data ' s управление графом объектов без необходимости сохранять что-либо на диск.

В ответ на ваш второй вопрос ответ - ДА. Интервал устаревания применяется к контексту, а не к постоянному хранилищу.

Итак, подходят ли Core Data для кэширования данных с удаленного сервера базы данных? На самом деле, нет. Хотя Билл Бумгарнер (инженер Apple) намекнул, что это возможно, я обнаружил, что в моем собственном коде гораздо проще отделить кеширование от управления графом объектов Core Data. По-прежнему очень приятно использовать Core Data для управления графом объектов и для упрощения привязки к слою (-ам) контроллера / пользовательского интерфейса. Итак, моя стратегия - извлечь данные с сервера базы данных и кэшировать их в моей собственной структуре данных (libcache и NSCache в OS X 10.6 могут стать очень хорошей отправной точкой). Затем решите, что вы хотите от графа объектов, и перенесите это в стек Core Data (поддерживаемый постоянным хранилищем в памяти). Вам придется самостоятельно обрабатывать уведомление об изменении или опрос с сервера базы данных. Когда данные из базы данных изменяются (или изменяется запрос пользователя и т. Д.), Я просто приказываю всем редакторам завершить редактирование, затем стираю контекст и перестраиваю его из (возможно) обновленного кеша.

12
ответ дан 9 December 2019 в 20:45
поделиться