我试图将我的iPhone应用程序中的字符串共享到我的WatchKit应用程序。我为iOS应用和WatchKit扩展启用了App Groups
。然后,在我的iOS应用程序中,我为UserDefaults设置了一个变量...
let defaults = UserDefaults(suiteName: "group.com.jacobcavin.appName")
然后在ViewController
中,我将默认值设置为TextField文本中的字符串......
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 Identifier,以及entitlement.plist
文件是正确的。你能帮忙吗?
答案 0 :(得分:0)
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。该过程仍然相同,但代码尚未更新。