从iPhone发送字符串到WatchKit应用程序
问题描述:
我试图从我的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
文件是正确的。你能帮忙吗?
答
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。该过程仍然相同,但代码尚未更新。
您必须使用WatchConnectivity框架,手机和手表无法通过应用程序组进行共享,因为watch os 1 – dan