从iPhone发送字符串到WatchKit应用程序

时间:2017-10-17 21:07:46

标签: ios swift nsuserdefaults watchkit

我试图将我的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文件是正确的。你能帮忙吗?

1 个答案:

答案 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。该过程仍然相同,但代码尚未更新。