2015-09-17 2 views
7

Это не проблема на watchOS 1, но теперь на watchOS 2 я не могу прочитать значения на расширении часов.набор настроек не работает на watchOS 2

Согласно Apple docs, это возможно. По некоторым данным на this thread, это возможно. По словам сотрудника Apple по телефону this thread, это возможно.

Я устанавливаю все правильно, насколько я могу сказать:

  • Я включил App группы как приложение IOS и смотреть расширение с же идентификатором.
  • Я добавил Настройки-Watch.bundle в приложение IOS, и добавил ApplicationGroupContainerIdentifier с тем же самым идентификатором к PLIST

Когда я инициализировать NSUserDefaults объект с идентификатором в качестве имени ванной, я не могу читать значения на расширении часов. Я могу прочитать их в приложении iOS. Это происходит в симуляторе и реальном устройстве.

Пожалуйста, не оставляйте ответ о том, как это сделать с помощью Watch Connectivity. Это можно сделать только с общим App групп на watchOS-без Watch Connectivity, люди в состоянии сделать это, и вот это прямо из docs:

В watchOS 2, ваше расширение WatchKit может читайте значения предпочтений, но вы не можете писать новые значения. Предпочтения в watchOS 2 пересылаются из iOS в Apple Watch, но любые сделанные вами изменения не отправляются обратно в iOS.

+0

Не могли бы вы привести пример о том, как вы пытаетесь прочитать набор настроек? – agy

+0

Я тоже пробовал это на Watch, и я могу подтвердить, что проблема не решена! (Группы включены, с надлежащим профилем и настройками) – insanoid

ответ

7

Я отредактировал свой ответ. Ранее речь шла о невозможности использовать группы приложений для синхронизации данных в watchOS 2, но ваш конкретный вопрос касается набора настроек, который по-прежнему синхронизируется с iOS на Apple Watch в watchOS 2.

Я не могу получить это работает в Xcode 7.1/7.2 в Simulator, , но он работает на реальном устройстве. Из документов:

Предпочтения в watchOS 2 пересылаются с прошивкой в ​​компании Apple Watch, но любые изменения, внесенные не посылаются обратно прошивкой. В watchOS 1 расширения WatchKit имеют прямой доступ к базе данных по умолчанию и могут читать и записывать значения.

Все 3 цели должны иметь тот же App Group настроена (цель Watch App здесь, кажется, отсутствует компонент в OPS вопросе):

targets app group

Мои настройки расслоением :

enter image description here enter image description here

простой код интерфейса в InterfaceController.swift:

@IBOutlet var label: WKInterfaceLabel! 

@IBAction func buttonAction() { 

    let sharedDefaults = NSUserDefaults.init(suiteName: "group.testSettings") 
    let name_preference = String(sharedDefaults?.objectForKey("name_preference")) 
    self.label.setText(name_preference) 
} 

и конечный результат:

enter image description here enter image description here

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

+0

Первый блок цитируемого текста - это именно то, о чем я говорю. «Настройки в watchOS 2 отправляются с iOS на Apple Watch». Почему они пишут, что если это не плохая ложь? – spybart

+0

также проверяю мой пересмотренный вопрос, я помещаю ссылку на поток, где сотрудник Apple говорит, что это возможно. – spybart

+0

Это интересно, и я пытаюсь работать с ним с вами :) Вы имеете в виду эту цитату, да? «Однако есть одно исключение, и это набор настроек, который будет синхронизироваться с iPhone для просмотра автоматически». Похоже, что набор настроек должен быть доведен до Apple Watch. –

0

Это потому, что приложения теперь запускаются на основе Apple Watch, что означает, что они не могут получить настройки с iPhone, потому что настройки не сохраняются на одном устройстве больше. Больше информации здесь: Unable to get values from settings bundle in watchOS 2

+0

Ваш ответ не применим к этому сценарию. Прочитайте темы, на которые я ссылался в вопросе. – spybart

+2

Подождите, что? Мой ответ был опубликован, когда у этого вопроса было гораздо меньше информации. – Roel

-1

Новый процесс обработки с использованием `WCSessions можно увидеть в примере приложения Apple - Lister в указанном ниже файле.

https://developer.apple.com/library/ios/samplecode/Lister/Listings/Objective_C_ListerKit__WatchOS__AAPLConnectivityListsController_m.html#//apple_ref/doc/uid/TP40014701-Objective_C_ListerKit__WatchOS__AAPLConnectivityListsController_m-DontLinkElementID_57

Кроме того, ответ упоминается в https://stackoverflow.com/a/32628105/1640786, кажется, делает весь процесс гораздо более удобным.

+0

Пожалуйста, прекратите отправку ответов, предлагающих использовать WatchConnectivity. Цель этого потока - заставить этот процесс работать с общими группами приложений без кода WatchConnectivity. Да, это возможно. – spybart

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