Как использовать NSUbiquitousKeyValueStore и NSUserDefaults вместе

#iphone #cocoa #nsuserdefaults #icloud #nsubiquitouskeyvaluestore

#iPhone #cocoa #nsuserdefaults #icloud #nsubiquitouskeyvaluestore

Вопрос:

В документации неясно, как использовать NSUbiquitousKeyValueStore в крайних случаях.

Если я хочу установить значение, я понимаю, что я должен установить значение для обоих NSUserDefaults и NSUbiquitousKeyValueStore , поскольку iCloud может быть отключен. Однако в моих тестах [NSUbiquitousKeyValueStore defaultStore] возвращает допустимый объект, даже если iCloud отключен (протестировано на Mac OS).

Кроме того, насколько я понимаю, если включен iCloud, NSUbiquitousKeyValueStore значения сохраняются на диске (и доступны в автономном режиме). По какой причине следует использовать NSUserDefaults, если вы уверены, что у вас меньше 64 КБ данных?

Ответ №1:

Я использую http://blog.mugunthkumar.com/coding/ios-code-mkicloudsync-sync-your-nsuserdefaults-to-icloud-with-a-single-line-of-code/

Это простой класс, написанный Мугунтом Кумаром (спасибо!), который выполняет всю работу за вас… Если у вас нет особых потребностей, добавьте одну строку кода, и она выполнит все операции чтения и записи в iCloud… все, что вам нужно сделать, это прочитать и записать в NSUserDefaults как обычно…

Редактировать:

Кстати, если вы удалите элемент из NSUserDefaults, код, на который я ссылался выше, не удалит элемент из облака. Всякий раз, когда вы удаляете элемент из NSUserDefaults, пожалуйста, делайте то же самое с NSUbiquitousKeyValueStore таким образом:

 NSUbiquitousKeyValueStore* keyValueStore=[NSUbiquitousKeyValueStore defaultStore];
[keyValueStore removeObjectForKey: yourKey];
  

Ответ №2:

Приведенный выше ответ Мугунта Кумара прекрасно работает, если вы хотите синхронизировать все свои NSUserDefaults!

Однако это подход «ВСЕ или НИЧЕГО». Вы не можете выбрать значения по умолчанию, которые хотите синхронизировать.

Я нашел это руководство, которое может помочь, если вы хотите быть более разборчивым.

Ответ №3:

Я написал простую категорию iOS, которую можно использовать для сохранения значения также в NSUbiquitousKeyValueStore при сохранении в NSUserDefalt.

надеюсь, это поможет:https://github.com/RiccardoPaolillo/NSUserDefault-iCloud