WatchOS 2.2 的 NSURLSession 非常慢

Posted

技术标签:

【中文标题】WatchOS 2.2 的 NSURLSession 非常慢【英文标题】:NSURLSession with WatchOS 2.2 very slow 【发布时间】:2016-03-26 21:00:16 【问题描述】:

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

效果很好。

但是,我无法在我的应用中使用它,因为我需要设置委托。

我该怎么做才能让它工作?

【问题讨论】:

你有解决办法吗?在 watch OS 2.2 + 中使用 NSURLSession 加载数据需要太多时间 在 watchOs 5 上,在具有蜂窝连接且不在手表范围内的手表上,简单的网络请求通常需要 > 30 秒。很郁闷 【参考方案1】:

我在 watchOS3 中仍然遇到同样的问题。缓慢的网络请求。尤其是刚安装手表应用时,第一次网络请求通常很慢。它最多可能需要 30 秒和超时,但在 ios 中会立即发生。

但我发现通过使用 iOS 应用程序发出网络请求并将其发送到手表应用程序,我发现了立竿见影的改进。

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

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

【讨论】:

以上是关于WatchOS 2.2 的 NSURLSession 非常慢的主要内容,如果未能解决你的问题,请参考以下文章

苹果编程语言Swift 2.2发布:支持Ubuntu Linux系统

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

WatchOS开发教程之五: 通知功能开发

WatchOS开发教程之五: 通知功能开发

watchOS 并发症 - 如何告诉 watchOS 更新时间线

WatchOS开发教程之六: 表盘功能开发