NSArray или NSDictionary для хранения в UserDefaults? - PullRequest
2 голосов
/ 29 ноября 2011

У меня есть коллекция пользовательских новостей, в настоящее время хранящихся в NSArray. Я должен хранить их в UserDefaults, чтобы сохранить их на устройстве. Новости имеют уникальный идентификатор недвижимости. Перед сохранением их в UserDefaults я преобразовываю NSArray в NSDictionary, где ключ - это идентификатор, а объект для этого ключа - это News. Это хороший способ их хранения?

Причиной выбора NSDictionary является возможность проверки наличия в списке новостей новостей с определенным идентификатором при каждой повторной загрузке новостей из веб-службы. Таким образом, у меня есть только один экземпляр News для каждого идентификатора News. Я думаю, что было бы трудно управлять с помощью обычного NSArray - или я что-то упустил?

Ответы [ 2 ]

4 голосов
/ 29 ноября 2011

Я должен сохранить их в UserDefaults, чтобы сохранить их на устройстве.

UserDefaults для хранения предпочтений, настроек и другой «небольшой» бит информации, они не для хранения данных приложения. Вам не «нужно» использовать NSUserDefaults, есть много других доступных вам опций. Запись в файлы (в каталоге документов) в их исходном виде или с использованием, например, NSKeyedArchiver / NSKeyedUnarchiver.

Вы можете получить путь к каталогу документов, подобный этому

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

Кроме того, хорошо хранить NSDictionary с идентификаторами новостей в качестве ключей. Я не вижу смысла в том, чтобы иметь NSArray и «конвертировать» его в NSDictionary, использовать одно или другое (таким образом, вы всегда гарантируете, что у вас есть только одна новость на элемент).

1 голос
/ 29 ноября 2011

NSUserDefaults не является базой данных, но вы уже знали это.

В любом случае, я бы сохранял массив напрямую, а также сохранял последний увиденный идентификатор новостей как отдельный параметр . Затем вам нужно только обработать новости с идентификатором, превышающим последний увиденный элемент. Когда вы загружаете новости, вам необходимо обновить как новости, так и последний увиденный идентификатор. Вы должны гарантировать, что идентификаторы находятся в порядке возрастания.

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

Если вы не обрабатываете много новостей (в этом случае вам все равно следует использовать Core Data), вы оптимизируете то, что не требует оптимизации. Чтение, сортировка, обновление и сохранение небольшого массива в NSUserDefaults довольно быстро.

...