2016-09-30 4 views
1

NSURLSessionDelegate에 이상한 문제가 있습니다.4G 및 iOS10에서만 대용량 파일에 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}) 

내 URL이 HTTP하고 유효한 url. 이 코드는 내가 wifi에 있거나 파일 크기가 < ~ 10MB이거나 iOS10이 아닌 경우 100 %의 시간 동안 작동합니다. 파일은 약 60 %까지 다운로드 된 다음 매번 실패합니다. 나는 아이디어가 잘못되어서 무엇이 잘못 될지 정당화 할 수 없다. 나는 위의 세 조건 중 하나라도 변경하는 경우가 iOS10 파일 크기 ~ 20메가바이트 의 4G/LTE 만 이 때

문제가 발생, 그것을 작동합니다.

내가 Apple code을 시도하고 문제가 동일

+0

이것은 iOS 10의 알려진 버그입니다.이 문제를 해결하는 이유와 해결 방법을 보려면 http://stackoverflow.com/questions/39346231을 찾아보십시오. – Mousavian

+0

@Mousavian에게 감사의 말을 전합니다. 귀하의 답변에 내 코멘트를 확인하십시오 :) – Husyn

답변

1

이 오류는 일반적으로 URL 방식이 지원되지 않는 것을 나타냅니다 (: //은 https : 즉, 그것은 HTTP 이외는 // 또는 ftp : //) 또는 그 앱의 일부인 NSURLProtocol 하위 클래스 (백그라운드 세션에서는 허용되지 않음)에 의존합니다.

NSURL 또는 NSURLRequest를 서브 클래 싱하는 것과 같이 이상한 작업을 수행하지 않는 한 지원되는 URL 스키마로 오류가 발생하는 경우 문제는 해결할 수없는 문제 일 수 있습니다. Apple에 버그를 제기하고 버그를 재현하는 최소한의 코드 스 니펫을 제공하십시오.

NSURL 또는 NSURLRequest를 서브 클래 싱하는 경우 NSURLSession과 특히 백그라운드 세션에서 이러한 서브 클래스가 올바르게 작동하지 않는다는 것을 알고 있어야합니다.

편집 : 분명히 iOS 10에는 네트워크가 끊어 질 때마다이 오류 코드가 예상되는 버그 대신 발생하는 알려진 버그가 있습니다. 해결 방법은 제공되는 이력서 데이터를 사용하여 언제든지 전송을 계속하는 것입니다.