2016-09-30 7 views
1

NSURLSessionDelegateに奇妙な問題があります。 20メガバイトは、私のファイルがあるときここに私の出力です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() 
       }) 
      } 
     } 
    } 
} 

〜と私は4G/LTEによ:ここに私のコードは、最初だ

didCompleteWithError error=Optional(Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo={NSLocalizedDescription=unsupported URL}) 

私はすでに私のURLがhttpを有し、その有効なチェックしましたurl。このコードは、私がWi-Fiを使用しているとき、またはファイルサイズが<〜10MBかiOS10でないときの100%の時間で動作します。ファイルは約60%までダウンロードされ、毎回失敗します。私はちょうど間違っているかもしれない何が自分自身を正当化するアイデアからちょうどある。

問題は、それが iOS10 ファイルサイズだ〜20メガバイト 4G/LTEにONLY を起こる、私は上記の3つの条件のいずれかを変更した場合、それが動作します。

私はApple codeを試してみましたが、問題は、このエラーは、通常(すなわち、それは、HTTP以外のものである:// https://でまたはftp://)URLスキームがサポートされていないことを示している同じ

+0

これはiOS 10の既知のバグです。この問題を解決する理由と解決方法については、http://stackoverflow.com/questions/39346231をご覧ください。 – Mousavian

+0

コメントのための@Mousavianありがとうございました。あなたの答えに私のコメントをチェックしてください:) – Husyn

答えて

1

であるか、彼らことアプリの一部であるNSURLProtocolサブクラス(バックグラウンドセッションでは許可されていない)に依存します。

サポートされているURLスキームでエラーが発生している場合は、NSURLまたはNSURLRequestをサブクラス化するような奇妙なことをしない限り、問題はおそらく回避できないものです。 Appleにバグを報告し、バグを再現する最小限のコードスニペットを提供してください。

NSURLまたはNSURLRequestをサブクラス化する場合は、NSURLSession(特にバックグラウンドセッション)ではこれらのサブクラスが正しく動作しないことをご存知でしょう。

編集:明らかにiOS 10には、ネットワークがなくなるたびにこのエラーコードの代わりにこのエラーコードが発生する既知のバグがあります。この問題を解決するには、提供されたレジュームデータを使用して、いつでも転送を続けることです。

関連する問題