NSUserDefaults(suiteName:) на iOS 9 и WatchOS 2 — не работает?

Я делал это раньше, но ничего не работает. Вот мой код:

Сохранение в приложении для iOS

let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")
groupDefaults?.setObject(theArray, forKey: "theKey")
groupDefaults?.synchronize()

Чтение (работает на iOS, но не на WatchOS 2)

let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")

if groupDefaults!.objectForKey("theKey") != nil {
    textEmojiArray = NSMutableArray(array: groupDefaults!.objectForKey("theKey") as! NSArray)
} else {        
    //error
}

Оба файла .entitlements содержат group.company.appSharedDefaults.

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

Прямо сейчас, когда я запускаю код чтения на часах, objectForKey возвращает nil, но работает на iOS (результаты устройства и симулятора одинаковы).

Что мне не хватает!?


person JustAnotherCoder    schedule 03.09.2015    source источник


Ответы (1)


В watchOS 2 вам нужно иметь в виду, что запущено 2 разных процесса:

  1. Процесс Apple Watch
  2. iPhone Процесс

Оба этих процесса имеют свою собственную песочницу, поэтому они называют ее «родной», поэтому, если вы попытаетесь использовать общие NSUserDefaults, это не сработает, потому что приложение Apple Watch имеет совершенно другую песочницу, чем основное приложение iPhone.

Если вы хотите сохранить что-то со своего телефона в NSUserDefaults на Apple Watch Target:

Используйте WatchConnectivity, чтобы отправить данные, которые вы хотите сохранить, на часы. Затем, когда часы получат отправленные вами данные, сохраните их в NSUserDefaults Apple Watch по умолчанию.

person Suneet Tipirneni    schedule 03.09.2015
comment
Ага, спасибо! Конечно, я нахожу причину сразу после того, как опубликовал этот вопрос. Я подумал, что у многих людей могут быть такие же вопросы, поэтому я оставил это. Спасибо за ответ - person JustAnotherCoder; 03.09.2015
comment
Это относится и к осложнениям? - person Bruno Philipe; 22.10.2015
comment
@BrunoPhilipe Хорошо, учитывая, что вам нужно приложение watchOS 2 для создания сложности, да - person Suneet Tipirneni; 22.10.2015
comment
Согласно Apple, это должно быть возможно : в watchOS 2 iOS автоматически пересылает доступную только для чтения копию настроек вашего приложения iOS на Apple Watch. - person stepmuel; 29.12.2015