我遇到了 NSURLSessionDelegate 的奇怪问题。这是我的代码:
class NetworkHandler: NSObject,NSURLSessionDelegate,NSURLSessionDownloadDelegate {
lazy var downloadsSession: NSURLSession = {
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("abc")
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
return session
}()
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
print("finished")
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
print("\(String(format: "%.1f%% of %@", progress * 100, totalSize))" )
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
print("didResumeAtOffset: \(fileOffset)")
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
print("didCompleteWithError error=\(error)");
}
func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) {
if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
if let completionHandler = appDelegate.backgroundSessionCompletionHandler {
appDelegate.backgroundSessionCompletionHandler = nil
dispatch_async(dispatch_get_main_queue(), {
completionHandler()
})
}
}
}
}
这是我的输出,当我的文件大约是20MB而我正在使用4G / LTE时:
didCompleteWithError error=Optional(Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSLocalizedDescription=unsupported URL})
我已经检查过我的网址有http和它的有效网址。当我在wifi上或文件大小<10MB或不是iOS10时,此代码可以100%的时间工作。文件下载到大约60%,然后每次都失败。我只是出于想法,甚至为自己辩解可能出错的地方。
问题发生在它的时候 iOS10 文件大小~20MB 仅限4G / LTE 如果我改变上述3个标准中的任何一个,它就可以了。
我尝试了Apple code,问题是一样的
答案 0 :(得分:1)
此错误通常表示URL方案不受支持(即,它不是http:// https://或ftp://),或者它们依赖于作为应用程序一部分的NSURLProtocol子类(在后台会话中不允许)。
如果您使用受支持的URL方案获得该错误,除非您正在做一些奇怪的事情,如子类化NSURL或NSURLRequest,问题可能不是您可以解决的问题。向Apple提交一个错误,并提供一个可以重现错误的最小代码段。
如果你是NSURL或NSURLRequest的子类,只要知道这些子类在NSURLSession中无法正常工作 - 特别是对于后台会话。
编辑:显然在iOS 10中,每当网络中断时,都会出现导致此错误代码而非预期错误的已知错误。修复是使用提供的恢复数据在发生时继续传输。