如何设置下载数据的时间限制(来自json数据库)Swift 2

Posted

技术标签:

【中文标题】如何设置下载数据的时间限制(来自json数据库)Swift 2【英文标题】:How to set a time limit downloading data (From json Database) Swift 2 【发布时间】:2016-08-27 17:59:33 【问题描述】:

我创建了一个按钮,当它被点击时,我的应用程序开始下载一个存储在数组中的 json 数据库。

当我开始下载数据库时,有时互联网很慢,设备无法下载内容,即使用户没有获得所需的数据,仍然可以使用该应用程序。

我想要的是一个计时器或一个计数器,它会在请求时间超过 1 分钟时提醒用户,并显示一条消息“没有互联网连接”或“下载数据库太慢”。

我希望你至少给我一个想法,因为我什至不知道要搜索什么:(

谢谢!

更新:这是我目前得到的代码。

覆盖 func viewDidLoad() super.viewDidLoad()

    let url = NSURL(string: "http://146.83.128.64/tongoy/g.php?&sala=-1&curso=-1&profesor=-1&semestre=-1&semestrec=-1&carrera=-1&area=-1")!

    let task = NSURLSession.sharedSession().dataTaskWithURL(url)  (data, response, error) -> Void in

        if let urlContent = data 

            do 

                let jsonResult = try NSJSONSerialization.JSONObjectWithData(urlContent, options: NSJSONReadingOptions.MutableContainers)

                for json in jsonResult as! Array<AnyObject> 

                    if let area = json["area"] as? String 
                        self.arregloArea.append(area)
                    
                    if let id = json["id"] as? Int 
                        self.arregloID.append(id)
                    
                    if let curso = json["curso"] as? String 
                        self.arregloCursos.append(curso)
                    

                    if let carreras = json["carreras"] as? Array<AnyObject> 
                        for item in carreras 
                            if let id = item["id"] as? Int 
                                print(id)
                            
                            if let nombre = item["nombre"] as? String 
                                print(nombre)
                            
                            if let semestre = item["semestre"] as? Int 
                                print(semestre)
                            
                            if let curso = item["curso"] as? Int 
                                print(curso)
                            
                        
                    
                
             catch 
                print("JSON serialization failed")
            

            dump(arregloCursos)
            dump(arregloArea)
            dump(arregloID)

        
    
    task.resume()

【问题讨论】:

你是如何下载数据的?您可能可以使用一个超时属性。 NSURLSession 可广泛定制。 显示您的代码。你是如何下载数据的?您应该使用 URLSession。您还可以使用 Reachability 确保设备已连接到 wifi 网络 你可以使用 NSURLSession 的timeOut 属性。检查这个问题。 ***.com/questions/23428793/… 我还没有真正的代码,我使用我的数据库链接下载NSJSONSerialization的数据库 【参考方案1】:
let request = NSMutableURLRequest(URL: url!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)

这将获取您的 JSON 数据库的 URL,设置为变量 url,然后以 5.0 秒的超时间隔请求它,您可以根据需要进行调整!祝你好运

更新:

let url = NSURL(string: "http://146.83.128.64/tongoy/g.php?&sala=-1&curso=-1&profesor=-1&semestre=-1&semestrec=-1&carrera=-1&area=-1")!

let request = NSMutableURLRequest(URL: url)
let taskConfiguration =     NSURLSessionConfiguration.defaultSessionConfiguration()
taskConfiguration.timeoutIntervalForRequest = 10
taskConfiguration.timeoutIntervalForResource = 10
self.session = NSURLSession(configuration: taskConfiguration, delegate: self.delegates, delegateQueue: nil)


let task = session.dataTaskWithRequest(request, completionHandler: data, response, error -> Void in
        let json:JSON = JSON(data: data!)
        onCompletion(json, error)
    )

注意:

现在你有一个超时,如果你没有收到数据回来/超时,你将不得不处理。因此,请检查您的数据是否 == nil,或者您的偏好是什么,并采取措施避免崩溃。

总结:

本质上,您是在创建自己的 NSURLSessionConfiguration,然后根据您应用的配置启动会话。

【讨论】:

嗯,我刚刚用我现在得到的代码更新了我的问题,你会在我的代码中哪里写?感谢您的反馈:) 我为你更新了我的答案,这应该可以满足你的需要!

以上是关于如何设置下载数据的时间限制(来自json数据库)Swift 2的主要内容,如果未能解决你的问题,请参考以下文章

5.Fiddler模拟弱网限速方法

如何使用来自 Alamofire 的 JSON 数据填充 tableview?

从android中的json get方法下载数据时使用百分比设置进度条

谷歌浏览器下载如何解除文件大小限制

如何展平多个嵌套的 json 并转换为数据框?

Dojo 中的 DataGrid,带有来自 servlet 的 json 数据