Swift中Watchkit扩展NSURLSession的问题

时间:2015-06-19 21:24:50

标签: swift watchkit nsurlsession

我试图调用我的本地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

我错过了一些明显的东西吗?

2 个答案:

答案 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。