iOS:停止无限数量的请求

Posted

技术标签:

【中文标题】iOS:停止无限数量的请求【英文标题】:iOS: stop indefinite number of request 【发布时间】:2015-05-05 09:00:23 【问题描述】:

在我的课堂上我有这个代码:

这是下载 JSON 并检查每个元素内部是否有下载文件的 url 的方法,我可以在需要时停止“my_doc_r”

func requestDocuments(completion:(response:AnyObject)->())

         my_doc_r = request(.POST, "http://example.com/json/docs")
            .responseJSON  (_, _, JSON, error) in

                if error == nil

                    var array = JSON as! NSArray
                    completion(response:array)

                    self.attachments_to_download = 0

                    for var i = 0; i < array.count; ++i

                        if array.objectAtIndex(i).objectForKey("file_url") as! String != ""

                            var url_file = array.objectAtIndex(i).objectForKey("file_url") as! String

                            self.downLoadFile(url_file)
                        
                                      
                
                else

                

        


    

否则我这里有无限数量的“下载”请求,如果我需要全部停止?我能做些什么? 我和经理一起尝试过,但我没有得到好的结果。 如果我想停止所有下载,我该怎么办? 或者最好的解决方案是等待一个下载完成后再开始另一个?

func downLoadFile(url:String)

        download(.GET, url,  (temporaryURL, response) in
            if let directoryURL = NSFileManager.defaultManager()
                .URLsForDirectory(.DocumentDirectory,
                    inDomains: .UserDomainMask)[0]
                as? NSURL 

                    let pathComponent = response.suggestedFilename

                    var finalPath = NSURL()

                    finalPath = directoryURL.URLByAppendingPathComponent(pathComponent!)

                    //check same file with same name, delete and replace
                    if NSFileManager.defaultManager().fileExistsAtPath(finalPath.absoluteString!) 
                        NSFileManager.defaultManager().removeItemAtPath(finalPath.absoluteString!, error: nil)
                    

                    return finalPath
            

            return temporaryURL
        )


    

【问题讨论】:

我很乐意提供帮助,但我不明白您的问题。您是否可以再通过一次并尝试澄清您要弄清楚的是什么?您是否想弄清楚如何取消正在运行的请求? 是的...您可以在我的代码中看到我在方法“downloadFile”中执行“下载”请求而没有指定已声明的下载请求...但是如果我想停止所有下载? 【参考方案1】:

终于找到了解决办法:

我更改了第一行并在我的末尾添加了一行:

func downLoadFile(url:String)

let my_req_down = download(.GET, url,  (temporaryURL, response) in //define the request

......
......

downloads_requests.addObject(my_req_down) //add all request in an array

当我想取消所有请求时:

for var i = 0; i < downloads_requests.count; i++ 

            var r :AnyObject!
            r = downloads_requests.objectAtIndex(i) as! Request

            if r != nil

                (r as! Request).cancel()
            
        

而且效果很好!!!

【讨论】:

以上是关于iOS:停止无限数量的请求的主要内容,如果未能解决你的问题,请参考以下文章

在特定数量的请求后停止蝗虫

如何允许无限制的发布请求 expressjs

Flutter 在无限循环中发送 http 请求

Objective-C AFnetworking:停止请求

AngularJS $http 无限调用

iOS 8 Mapkit 和位置 - 每天的请求数量是不是有任何限制?