Xcode Swift appleWatch读取应用程序UserDefaults?

时间:2019-11-26 15:30:55

标签: ios swift xcode swiftui

我尝试从AppleWatch扩展中读取应用程序UserDefaults,在研发失败两天后,我正在发布此线程。

例如,我正在尝试使用以下代码(即使应用终止)来确定用户是否登录了appleWatch端:

struct ContentView: View {

    let auth_token:String = UserDefaults(suiteName: "group.mybundle.app.com")!.string(forKey: "token") ?? ""

    @ViewBuilder
    var body: some View {

        if self.auth_token == "" {
             Text("You need to be Logged in").frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
        }else{
              WebImage(imageURL: URL(string: token)).frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
        }

    }
}

,并在用户成功登录后从应用程序端进行访问:

   UserDefaults(suiteName: "group.mybundle.app.com")!.set(rr, forKey: "token")
   UserDefaults(suiteName: "group.mybundle.app.com")!.synchronize()

我仍然无法阅读token

从appleWatch扩展读取父应用程序数据UserDefaults的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

就像Shunzhe提到的那样,您无法再在iOS和WatchOS之间共享UserDefaults

您可以使用sendMessage:replyHandler:errorHandler的{​​{1}}方法来唤醒iPhone,运行一些代码并将某些内容发送回手表。

More info here.

答案 1 :(得分:1)

已弃用或不建议从iOS应用程序到Apple Watch共享应用程序组,如here所述。

从iOS应用程序向WatchOS应用程序传输数据的一种方法是使用WatchConnectivity框架。 Here是Apple的官方文档。

要记住的事情: 1. in cases when your watch app is running in the background

  1. here're some sample codes

  2. A sample app from Apple