NSKeyedArchiver кодирует только часть массива - PullRequest
4 голосов
/ 19 декабря 2010

У меня есть список объектов, которые иногда могут меняться, и я хочу сохранить постоянный кеш на устройстве, когда приложение закрыто или переходит в фоновый режим. Большинство объектов в списке не изменится, поэтому мне было интересно, как лучше всего сохранить список. У меня есть два основных варианта:

  1. Использование NSKeyedArchiver / unArchiver - это наиболее удобный метод, поскольку сериализуемые объекты содержат другие пользовательские объекты, поэтому таким образом я могу просто написать собственный метод кодирования для каждого из них. Основная проблема в том, что я не нашел в Google, как сериализовать только измененные объекты, и сериализация всего списка каждый раз кажется очень расточительной.

  2. Использование SQLite - это то, что я сейчас использую, и худшая проблема здесь в том, что добавление \ изменение свойств объектов очень сложно и гораздо менее элегантно.

Можно ли как-нибудь воспользоваться удобством NSKeyedArchiver, но только сериализовать измененные объекты?

1 Ответ

0 голосов
/ 08 января 2011

Как и Adam Ko, я бы посоветовал использовать Core Data:
В конце концов, проблема такого рода в том, что она действительно хороша!

Если ваши элементы кэша независимы друг от друга, этого можно достичьпросто оборачивая элементы кэша тонким слоем NSManagedObject (т. е. вы могли бы извлечь выгоду из Core Data только с небольшими изменениями в вашем приложении).

Этот объект-обертка может хранитьзаархивированную версию элемента кэша с атрибутом типа NSBinaryDataAttributeType и обеспечивает доступ к неархивированному объекту через временное свойство.См. Нестандартные постоянные атрибуты для примера.

...