Ios 如何使用NSURLSession确定重定向链接是否中断?

Ios 如何使用NSURLSession确定重定向链接是否中断?,ios,swift,nsurlsession,Ios,Swift,Nsurlsession,我试图使用NSURLSession来确定传入URL数组后链接是否中断。下面代码的问题是,else{print(“没有从getDataFromSErverWithSuccess返回数据,这就是问题:\(myURL)”)行中的myURL返回nil。我怎样才能得到被破坏的URL的值 class MySession: NSObject, NSURLSessionDelegate { func URLSession(session: NSURLSession, task: NSURLSessi

我试图使用
NSURLSession
来确定传入URL数组后链接是否中断。下面代码的问题是,
else{print(“没有从getDataFromSErverWithSuccess返回数据,这就是问题:\(myURL)”)行中的myURL返回nil
。我怎样才能得到被破坏的URL的值

class MySession: NSObject, NSURLSessionDelegate {


    func URLSession(session: NSURLSession, task: NSURLSessionTask, willPerformHTTPRedirection response: NSHTTPURLResponse, newRequest request: NSURLRequest, completionHandler: (NSURLRequest!) -> Void) {


        if let checkedURL = request.URL {

            if UIApplication.sharedApplication().canOpenURL(checkedURL) {
                print("\(checkedURL) works")

            } else {
                print("\(checkedURL) IS BROKE!")
            }
        }


    }

    // fetch data from URL with NSURLSession
    class func getDataFromServerWithSuccess(myURL: String, noRedirect: Bool, success: (response: String!) -> Void) {
        var myDelegate: MySession? = nil
        if noRedirect {
            myDelegate = MySession()
        }
        let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: myDelegate, delegateQueue: nil)
        let loadDataTask = session.dataTaskWithURL(NSURL(string: myURL)!) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

                if let checkedData = data {

                success(response: NSString(data: checkedData, encoding: NSASCIIStringEncoding) as! String)
                } else { print("no data back from getDataFromSErverWithSuccess and this is the problem: \(myURL)")}
        }
        loadDataTask.resume()
    }
编辑:这是我调用的
getDataFromServerWithSuccess
可以通过在此处添加错误块来获取url吗

MySession.getDataFromServerWithSuccess(urlAsString, noRedirect: false, success:
                                        { (response: String!) -> Void in

                                    })

您可以从会话任务获取属性为
currentRequest
的重定向请求


来源:

canOpenURL返回一个布尔值,指示设备上安装的某些应用程序是否可以处理URL的方案,而不是URL是否被破坏。请参阅:如果要检查URL是否联机,则需要检查返回的HTTPURLResponse状态代码。参见Thank
canOpenURL
只是一个初步检查,URL是否在线的真正测试是在
会话中。dataTashWithURL
谢谢!但是我如何在这里访问该属性
loadDataTask.currentRequest
它将在其自身初始值中使用的变量?@PSUSabes将
loadDataTask
设置为可选变量,并使用
nil
对其进行初始化。然后您可以在完成闭包中访问它。
loadDataTask.currentRequest
返回初始url,而不是重定向最终得到的“源”url可能是因为重定向url失败了?!现在,您可以添加委托方法
URLSession(\uu:task:willPerformHTTPRedirection:newRequest:completionHandler:)
,以调查该问题。在执行重定向之前,将调用委托。如果原来的代码> CurrestRebug < /C>是唯一的设置,如果它成功了,我会认为它是NSLREST中的一个bug。我想问题是我在一个可选的传递中,它是几个层次的展开,所以我没有注意到。code>currentRequest.url正在告诉我重定向的url…谢谢你的帮助!