2017-10-17 106 views
0

我试图从我的iPhone应用程序共享一个字符串到我的WatchKit应用程序。我为iOS应用和WatchKit扩展启用了App Groups。然后,在我的iOS应用程序,我在ViewController设置了UserDefaults变量...从iPhone发送字符串到WatchKit应用程序

let defaults = UserDefaults(suiteName: "group.com.jacobcavin.appName") 

然后,我设置默认值从文本字段的文本字符串...

defaults?.set(textField.text!, forKey: "KEY") 

在iOS应用程序内部,这个功能完美,我可以访问它并获得正确的值。但是,在WatchKit内部应用程序,我试图让弦...

let defaults = UserDefaults(suiteName: "group.com.jacobcavin.appName") 
let string = defaults?.string(forKey: "KEY") 

string回报nil。我浏览了大量的教程,并且确保每个目标都具有相同的组标识符,不同的Bundle标识符,并且entitlement.plist文件是正确的。你能帮忙吗?

+1

您必须使用WatchConnectivity框架,手机和手表无法通过应用程序组进行共享,因为watch os 1 – dan

回答

0

A UserDefaults应用程序组无法使用手表应用程序扩展程序。您需要使用WCSession发送一个applicationContext到手表,然后在手表中将这些值设置为其UserDefaults

例如在iPhone上,您可以激活WCSession.default并致电try WCSession.default.updateApplicationContext(applicationContext),其中applicationContext[String : Any]。如果扩展程序位于前台,应用程序上下文将发送至手表,或者将在下次启动应用程序时将应用程序上下文传送至扩展程序。

为了应对在手表的应用程序扩展的背景下,激活默认会议声明自己是一个代表接收新的应用程序上下文:

func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { 
     // handle receiving application context 
     DispatchQueue.main.async 
     { 
      // Save to UserDefaults or Update UI etc. 
     } 
} 

一个有些过时的例子可以发现here。该过程仍然相同,但代码尚未更新。

相关问题