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
我想打电话给我的本地人 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