【发布时间】:2015-12-30 15:38:44
【问题描述】:
我正在尝试使用 NSURLSession 来确定在传入 URL 数组后链接是否损坏。下面代码的问题是 else { print("no data back from getDataFromSErverWithSuccess and this is the problem: \(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 的地方,我可以通过在此处添加错误块来获取网址吗?
MySession.getDataFromServerWithSuccess(urlAsString, noRedirect: false, success:
{ (response: String!) -> Void in
})
【问题讨论】:
-
canOpenURL 返回一个布尔值,指示 URL 的方案是否可以由安装在设备上的某些应用程序处理,而不是在 URL 损坏的情况下。请参阅developer.apple.com/library/ios/documentation/UIKit/Reference/…:如果要检查 URL 是否在线,则需要检查返回的 HTTPURLResponse 状态码。见stackoverflow.com/questions/6008399/…
-
感谢
canOpenURL只是初步检查,真正的检测网址是否在线在session.dataTashWithURL
标签: ios swift nsurlsession