2014-11-17 6 views
3

Есть три способа записи настойчива устройства в прошивке, что я в курсе:Предотвращения NSUserDefaults из ICloud резервного копирования

  1. NSUserDefaults
  2. Пользовательских объекты - архивированный и записываемый в PATH в NSDocuments
  3. SQLite

Apple, обеспечивают механизм для предотвращения резервного копирования ICloud с # 2 т.е.

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL

Я использую NSUserDefaults для хранения трех изображений, но и прилипает к Инструкции по хранению данных IOS - Как предотвратить Резервные копии с ICloud с NSUserDefaults?

Этот вопрос задан несколько раз на SO, но пока нет четкого исчерпывающего ответа.

Есть ли такая функция или мне нужно изменить сохранение изображений, используя метод # 2. Я надеялся что-то удобное как:

- (BOOL)addSkipBackAttributeForStandardUserDefaultsKey:(NSString *) 

есть.

+0

Ваш подход кажется немного странным. Почему вы не можете хранить изображение в каталоге документов? Почему вам нужно это делать в NSUserdefaults? –

+0

Я могу, конечно, модифицировать свой код, чтобы придерживаться механизма в # 2, но я надеялся на более простой способ, аналогичный тому, как # 2 предотвращает резервное копирование iCloud. Что странно, что механизм яблок для хранения данных не может придерживаться своих собственных рекомендаций. Я просто предполагаю, что кое-что еще не понимаю, или часть информации, которую я пропустил где-то, изучая iOS. Возможно, хранение изображений с помощью NSUserDefaults - плохая идея, но я не понимаю, почему. –

+0

NSUserdefaults можно использовать для хранения нескольких данных, которые контролируют поведение приложения или хранят ключи конфигурации приложения и т. Д. Вы можете добавлять изображения в каталог документов и использовать 'addSkipBackupAttributeToItemAtURL' для пропуска iCloud-резервной копии. Не существует такого механизма, как 'addSkipBackAttributeForStandardUserDefaultsKey' для предотвращения данных NSUserDefaults. Он будет автоматически резервным копированием, поскольку он содержит пользовательские данные, такие как пользовательские настройки и пользовательские конфигурации. –

ответ

6

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

Неверно сказать, что этот «... механизм Apple для хранения данных не может придерживаться своих собственных рекомендаций», потому что это не цель этого API. В этом случае конкретно, если эти изображения не должны быть скопированы, это абсолютное свидетельство того, что пользовательские настройки по умолчанию являются неправильным местом для их хранения.

Вы должны сохранить изображения в файлах. Если у вас есть UIImage, это просто. UIImage соответствует NSCoding, поэтому его легко конвертировать в/из NSData. И NSData содержит удобные методы для чтения/записи объектов в файлы. Если имена файлов могут измениться, вы можете разумно поместить имена файлов в настройки по умолчанию пользователя. Если имена файлов известны заранее и не могут измениться, то нет причин их хранить.

+0

«Вы должны сохранять изображения в файлах». Просто потому, что изображения часто сохраняются один за другим в файлы, на самом деле не является причиной того, что приложение всегда должно сохранять изображения в файлах. Данные изображения или звуковые данные или любые другие данные - это просто * данные *, и единственное, что касается приложения, это то, что оно сохраняется и что к нему можно получить доступ снова. NSUserDefaults работает для любых данных, поэтому он специально поддерживает NSData. Если эти данные не должны быть скопированы, NSUserDefaults, очевидно, не поддерживает это, но нет никакой корреляции с типом данных, изображения, звука или чего нет. – Jonny

+1

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

Смежные вопросы