我尝试在WatchOS 2.2应用程序中使用NSURLSession从Web服务器下载一些JSON数据。在iPhone上运行完美无瑕的相同代码,永远在手表上(使用模拟器)。
我查看了这个示例:https://github.com/shu223/watchOS-2-Sampler,它具有通过NSURLSession下载和显示图像的功能,并且它有同样的问题。
此示例的代码为:
let url = NSURL(string:"https://pbs.twimg.com/profile_images/3186881240/fa714ece16d0fabccf903cec863b1949_400x400.png")!
let conf = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: conf)
task = session.dataTaskWithURL(url) { (data, res, error) -> Void in
if let e = error {
print("dataTaskWithURL fail: \(e.debugDescription)")
return
}
if let d = data {
let image = UIImage(data: d)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if self.isActive {
self.image.setImage(image)
}
})
}
}
task!.resume()
玩弄它,我发现如果我将代码更改为
let session = NSURLSession.sharedSession()
它工作正常。
但是,我不能在我的应用中使用它,因为我需要设置代理。
我能做些什么让它发挥作用?
答案 0 :(得分:1)
我仍然在watchOS3中遇到同样的问题。网络请求缓慢。特别是当新安装的手表应用程序时,第一个网络请求通常非常慢。它可能需要长达30秒并超时,但立即在iOS中。
但我发现通过使用iOS应用程序发出网络请求并将其发送到手表应用程序即可立即改进。
我在watchOS中使用WCSession sendMessage:replyHandler:errorHandler来通知iOS应用程序发出特定的网络请求。然后我通过session中的replyHandler发回网络请求的响应:didReceiveMessage:replyHandler。只有短暂的滞后。
作为后备,每当sendMessage失败时,我都会通过监视应用程序发出相同的请求,因此如果iPhone不在附近,它仍然可以正常工作。