使用WatchOS 2.2的NSURLSession非常慢

时间:2016-03-26 21:00:17

标签: ios ios-simulator nsurlsession apple-watch

我尝试在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()

它工作正常。

但是,我不能在我的应用中使用它,因为我需要设置代理。

我能做些什么让它发挥作用?

1 个答案:

答案 0 :(得分:1)

我仍然在watchOS3中遇到同样的问题。网络请求缓慢。特别是当新安装的手表应用程序时,第一个网络请求通常非常慢。它可能需要长达30秒并超时,但立即在iOS中。

但我发现通过使用iOS应用程序发出网络请求并将其发送到手表应用程序即可立即改进。

我在watchOS中使用WCSession sendMessage:replyHandler:errorHandler来通知iOS应用程序发出特定的网络请求。然后我通过session中的replyHandler发回网络请求的响应:didReceiveMessage:replyHandler。只有短暂的滞后。

作为后备,每当sendMessage失败时,我都会通过监视应用程序发出相同的请求,因此如果iPhone不在附近,它仍然可以正常工作。