Swift 中 Watchkit 扩展 NSURLSession 的问题

Problems with Watchkit Extension NSURLSession in Swift

我想打电话给我的本地人 API 以通过我的手表关闭我的房子照明,但我无法从 watchkit 扩展中呼叫 url。

在我的 ViewController(iPhone 应用程序)中,我得到了完全相同的代码(有效),但不知何故,当我在 Watchkit 的 InterfaceController 中调用它时,它不起作用扩展。

@IBAction func confirmTapped() {

    let url = NSURL(string: "http://homeserver.local/api/lights/4/0")
    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
        print(NSString(data: data!, encoding: NSUTF8StringEncoding))
    }

    task!.resume()
}

我还附上了要点:https://gist.github.com/f72125cd4678069af7af.git

我是不是遗漏了什么明显的东西?

我不知道从 Watch 扩展中启动 NSURLSession 是否是一件好事。如果请求时间过长,将被取消。

也许您可以通过 openParentApplication:reply ping 手表并在您的 iPhone 应用程序上处理 NSURLSession。

虽然 Frederick 的建议对 WatchKit 1 来说是可靠的建议,但 WatchKit 2 中不再提供 openParentApplication:reply。使用 WatchKit 2,您肯定会在 WatchKit 应用程序扩展本身中打开 NSURLSession,因为使用 WCSession 意味着 URL 只会在 iPhone 应用程序本身为 运行 时打开,无论是在前台还是碰巧仍然是 运行在后台,因为系统还没有关闭。

您遇到的问题可能是因为您需要在 WatchKit App Extension 上添加 'Allows Arbitrary Loads' 属性。请参阅此可能相关线程中的讨论:NSURLSession returns data as Null on Watch OS2 using Objective-C