Постоянство в iOS: Сериализация списка свойств против NSUserDefaults против Базовых данных - PullRequest
1 голос
/ 13 октября 2011

Я новичок в iOS. Мое требование - собрать несколько строк ошибок из приложения и периодически публиковать их в моем веб-сервисе. Каждая ошибка представляет собой простую строку NSString длиной около 100 символов. Я могу накопить до 1000 записей об ошибках между постами. Фактическое сообщение будет сделано в фоновом потоке, но сбор и сохранение журналов ошибок будут выполняться в основном потоке. Я пытаюсь выбрать один из следующих методов для сохранения:
1) Сериализация списка свойств (мои записи журнала будут NSArray of NSStrings)
2) NSUserDefaults (мой NSArray будет объектом значения для некоторого ключа в NSUserDefaults)
3) Базовые данные (но только один NSManagedObject для журнала и только одно свойство внутри него, строка сообщения журнала)

Обратите внимание, что я говорю "logs", но я делаю всю работу по регистрации вручную. (Есть ли другой вариант?)

Одним из важных факторов для меня является постепенное сохранение записей журнала на диске. Другими словами, если я уже сохранил 500 записей журнала, и пришло 501-е, я не хочу повторно сохранять 500 + 1 записей журнала по соображениям эффективности. Похоже, что используя опции (1) и (2) я не могу постепенно сохранять вещи. Я думаю, мне придется каждый раз переписывать блоб. Я все еще изучаю вариант (3). Просто подумал о том, чтобы получить мнение эксперта по этому вопросу:)

Ответы [ 2 ]

1 голос
/ 13 октября 2011

* Обновление * Нет необходимости в Core Data или чем-то подобном.

Просто создайте текстовый файл в своей папке Documents, вызовите log.txt (на самом деле все в порядке).Когда вы будете готовы сохранить свой NSArray, используйте следующий метод:

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag

Когда вы будете готовы, вы можете опубликовать файл, очистить его содержимое, и вы будете готовы к следующему массиву.


Я бы использовал Core Data только потому, что это все очень просто.

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

Вы можете сохранить дату lastPost в NSUserDefaults, найти файлы журналов, которые были созданы после даты lastPost, опубликовать файлы журналов,обновите дату lastPost и сделайте это.

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

0 голосов
/ 09 января 2016

Вы также можете использовать NSJSONSerialization, который может записать ваш массив в формате документа JSON в файл, что часто полезно, если вы хотите отправить данные на сервер позже.Правила для списка свойств и JSON довольно похожи, но не идентичны.

...