2017-02-13 25 views
0

Я хочу спросить о том, как использовать NSUserDefaults в приложении watchOS. Являются ли его данные отличными от данных приложения iOS NSUserDefaults?Является ли Apple изменением доступа NSUserDefaults от приложения iOS к приложению watchOS

Therearealotof StackOverflow вопросы по этой теме, и все они имеют одни и те же ответы. Тем не менее, к примеру

Watch приложений, которые разделяют данные с их IOS приложений с использованием общей группы контейнер должен быть переработан, чтобы обрабатывать данные по-разному. В watchOS 2, каждый процесс должен управлять собственной копией любых общих данных в локальном каталоге контейнеров . Для данных, которые фактически разделены и обновлены на , оба приложения требуют использования рамки Watch Connectivity для для перемещения этих данных между ними.

Однако все цитируемый текст исчез из the web page referred см this accepted answer. В настоящее время Apple Docs. Существует

Кроме того, iOS автоматически перенаправляет копию вашего приложения iOS на Apple Watch. Расширение WatchKit может читать эти настройки, используя объект NSUserDefaults, но он не может внести изменения в базу данных по умолчанию.

У меня 2 вопроса:

  • Какой из них правильный: все ответы StackOverflow вопросы я уже упоминал выше, или, Яблоко Docs

  • Какой механизм использования IOS для пересылки NSUserDefaults объект для приложения watchOS? Надежно ли это надеяться на будущую разработку и как последние данные обновляются. Может ли эта функция быть устаревшей в ближайшем будущем?

Большое спасибо

ответ

-1

Чтобы ответить на ваш вопрос относительно какой ответ является правильным на NSUserDefaults поведение, является то, что обе они правильны.

Apple отправляет приложение iOS NSUserDefaults как значения, доступные только для чтения, но часы имеют собственный NSUserDefaults, а также его значения. Основной вывод из документации заключается в том, чтобы смотреть приложения для перехода от общих групп контейнеров с помощью NSUserDefaults, поскольку первые приложения watchKit были реализованы таким образом. Теперь Apple добавила WatchConnectivity, который является стандартом для обмена данными между ними.

Чтобы ответить на ваш второй вопрос, положитесь на NSUserDefaults, как обычно, чтобы сохранить предпочтения, связанные с каждым приложением отдельно, и использовать WatchConnectivity для обмена данными между приложениями.

+0

это будет другой вопрос. Чтобы изменить/обновить iOS 'NSUserDefaults' из приложения Watch Kit. Я собираюсь использовать 'sendMessage: replyHandler: errorHandler:', дождаться 'replyHandler:' ответ, что 'iOS' обновил свой собственный' NSUserDefaults', после чего используют последние данные 'NSUserDefaults' на часах.Является 'sendMessage: replyHandler: errorHandler:' подходит в этой ситуации. Большое спасибо – transang

+0

@tranvansang Да, это один из способов сделать это. Вы также можете использовать 'transferUserInfo (_ :)' https://developer.apple.com/reference/watchconnectivity/wcsession/1615671-transferuserinfo, если обновление на стороне iOS может происходить в фоновом режиме. Кроме того, что касается вашего потока, если часы обновляют что-то в приложении iOS, не ждите, чтобы снова прочитать «NSUserDefaults». Просто отправьте свое обновление в приложение iOS и просто обновите часы соответствующим образом, не заново прочитав значения по умолчанию. Часы должны действовать как свое приложение. Отправьте сообщение и приступите к обновлению. Надеюсь, это поможет. – lostAtSeaJoshua

+0

спасибо, что ответили. 'transferUserInfo' не может гарантировать, что данные обновляются на телефоне. Последующее чтение «NSUserDefaults» может возвращать неожиданные не обновленные данные. Кстати, я думаю, что есть компромисс между выбором метода передачи – transang