2013-06-18 2 views
0

я следовал документации Apple, по синхронизации настроек через ICloud - по существу, итерация каждый ключ в «обновленном» информации о пользователе и установив его в [NSUserDefaults standardDefaults].Локальное хранение данных ключ-значение, кроме NSUserDefaults

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

Есть ли способ хранить их таким же образом, но в отдельном месте? Или мне нужно изменить метод iCloud 'update form, чтобы явно исключить их по имени ключа? Это кажется немного негибким и подверженным ошибкам (помня, что обновляю «ключи для исключения», когда я меняю то, что хочу хранить локально).

+0

Мы говорим только о написании nddictionaries в локальных файлах plist? – Augie

ответ

2

Вы можете хранить такие данные в «< папку Library Поддержки >/Application/< приложения расслоение ID >» - использовать стандартный API для поиска библиотек папки пользователя (который будет в контейнере). Сама папка «Поддержка приложений» может не существовать, поэтому при необходимости необходимо проверить и создать. Ваша собственная папка приложения не будет существовать, если вы ее не создадите, поэтому проверьте и создайте.

В различных коллекциях есть методы для чтения/записи из URL-адресов, например. для NSArray:

+ (id)arrayWithContentsOfURL:(NSURL *)aURL; 
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag; 

После того, как у вас есть путь к каталогу выше создать URL для соответствующего имени файла, например «theArrayOfDictionaries.plist» и используйте эти методы для чтения/записи на него. Единственное предостережение - сбор должен содержать только те типы, которые могут быть сохранены в списке свойств. Если у вас есть не-plist-типы, например. NSColor или ваши собственные классы, то вам необходимо их преобразовать в NSData до/после записи/чтения - см. this page for how to do this for NSColor, другие типы могут обрабатываться аналогичным образом.

HTH.

+0

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