Как лучше всего использовать Core Data для временного хранения?

Допустим, я создаю приложение, которое выбирает канал RSS для определенного веб-сайта. Пользователь может запросить статьи для New York Times, а затем закончить и запросить статьи из The Boston Globe.

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

Но как мне справиться с тем, что я не хочу держать вещи вокруг навсегда? В приведенном выше примере, когда пользователь запрашивает The Boston Globe, мне больше не нужно хранить данные в New York Times, и на самом деле раздражает, когда NSFetchedResultsController просит что показать и все еще в магазине.

3 ответа

Решение

Одна проблема, которую я вижу при использовании Core Data для временного хранения, - это очистка. Базовые данные не предоставляют API для массового удаления строк, скажем, путем указания NSPredicate, заставляя вас использовать циклы при удалении строк.

Тем не менее, удобство использования NSFetchedResultsController может стоить проблем с удалением: этот ответ предоставляет решение для удаления всех данных программным способом (другой ответ, который предполагает удаление базовых файлов, может не работать в последних версиях iOS).

Если вы не возражаете против написания некоторых SQL-запросов, работа с "сырым" SQLite без использования слоя Core Data может обеспечить более чистую альтернативу, поскольку вы можете перенести удаления в хранилище с помощью очень простых команд SQL DML.

Вы должны использовать опцию хранения в памяти NSInMemoryStore вместо Sqlite для вашего NSPersistentStoreCoordinator, если вы не хотите сохранять на диск.

Используя неологизм в веб-разработке, я бы не создавал таблицу SQL для каждого сеанса пользователя, а затем удалял бы ее, когда он / она выходил с сайта. Это было бы дорого с точки зрения использования процессора. Думайте о базовых данных в этих терминах. Используйте это для постоянных данных.

Есть аспекты вашего приложения, которые не очень понятны, но в целом я бы предпочел использовать NSDictionary для хранения данных. Затем перемещайте эти данные в NSArray, который хорошо работает с NSPredicate, при каждом запуске поиска.

Теперь, если ваш конкретный случай и вы считаете, что Core Data добавит производительность или UX-значение вашему приложению, то вы можете вставить объекты в Core Data и удалить их, когда applicationDidEnterBackground или же applicationWillTerminate,

[NSEntityDescription insertNewObjectForEntityForName:@"feed" inManagedObjectContext:context];
[context deleteObject:aManagedObject]; 

Это мои 2 цента.

Другие вопросы по тегам