我试图调用我的本地API来关闭手表中的房屋照明,但我在watchkit扩展程序中调用网址时遇到了问题。
在我的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()
}
我还附上了一个要点:ImplicitSuite
我错过了一些明显的东西吗?
答案 0 :(得分:2)
虽然Frederick的建议对于WatchKit 1是可靠的建议,但WatchKit 2中不再提供openParentApplication:reply
。使用WatchKit 2,您肯定会在WatchKit App Extension中打开NSURLSession
,因为使用a WCSession
表示只有当iPhone应用程序本身正在运行时才会打开URL,无论是在前台还是由于系统尚未关闭它而仍然在后台运行。
您遇到的问题可能是因为您需要在WatchKit App Extension上添加“允许任意载入”属性。请参阅此可能相关主题中的讨论:NSURLSession returns data as Null on Watch OS2 using Objective-C
答案 1 :(得分:1)
我不知道从Watch扩展程序中启动NSURLSession是否是一件好事。如果请求需要很长时间,它将被取消。
也许您可以通过openParentApplication ping手表:回复并处理iPhone应用上的NSURLSession。