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

标签 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 标识符,并且 entitlement.plist 文件是正确的。你能帮忙吗?

最佳答案

UserDefaults 应用组无法与 watch 应用扩展一起使用。您需要使用 WCSession 向 watch 发送 applicationContext,然后在 watch 中将这些值设置为其 UserDefaults

例如,在 iPhone 上,您将激活 WCSession.default 并调用 try WCSession.default.updateApplicationContext(applicationContext),其中 applicationContext[字符串:任意]。如果扩展程序位于前台,应用程序上下文将被发送到 watch ,或者将在下次启动应用程序时传递到扩展程序。

要响应 watch 应用程序扩展中的上下文,请激活默认 session ,将自己声明为委托(delegate)以接收新的应用程序上下文:

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

可以找到一个有点过时的示例 here 。流程还是一样,只是代码没有更新。

关于ios - 将字符串从 iPhone 发送到 WatchKit 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46799240/

相关文章:

ios - 如何将 ruby​​ 中的随机字符串传递给 iOS 应用程序?

ios - NSOperation operationDidFinish 出现错误,再次将操作添加到队列

ios - 如何将用户标识保存在 nsuserdefaults 中?

arrays - 重新保存 index.row 所选键的 NSUserDefaults 值

objective-c - 阅读另一个应用程序的首选项列表,或共享一些首选项?

iOS - 访问未知 View Controller 中的属性

ios - TableView 不使用 ReloadData() 进行更新

ios - 为什么 .crash 日志在 UIPresentationController 中显示崩溃,但我的应用程序不使用 UIPresentationController?

ios - 水平渐变不适用于动态宽度内容

ios - 如何在 PDFKit 中显示从互联网下载的 pdf?