2016-08-18 5 views
2

私はwebViewDidFinishLoadUIWebViewから問題が発生していると私はnilとしてのUIWebView request.response = nilの問題

if let urlResponse = NSURLCache.sharedURLCache().cachedResponseForRequest(webView.request!)?.response { 

    if (urlResponse as! NSHTTPURLResponse).statusCode == 200 { 

    } 
} 

を取得していますので、体が示されているが、私はステータスコードをチェックすることはできません。問題はどこにありますか?サーバー側からできることはありますか?

編集:他のリクエストから私は応答を見ることができます。

+0

は、あなたのURLが読み込まれた手段は可視かどうかわからない –

+0

@ Anbu.Karthik私はあなたを理解できませんでした、あなたは目に見えるかどうかはどういう意味ですか? –

+0

それはいつも起こりますか?または、いくつかのURLにのみ? –

答えて

0

あなたのリクエスト応答を取得するためにNSURLCacheをチェックしているからです。しかし、あなたのページを表示することはできますが、キャッシュすることはできません。実際、サーバーは次のような応答をすることができます:

Cache-Control: no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: 0 

「私の応答をキャッシュしてはいけません。良い市民として、iOSはありません:)。したがって、サーバーの応答を取り戻すには別の方法を使用する必要があります。最高の解決策は、NSURLSessionを使用してリクエストを作成し、コンテンツをダウンロードしてwebviewに転送することです。要求が行われると、完了ハンドラが応答にアクセスできるようになります。

func loadURL(url: NSURL!) { 
    let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: config) 

    let muableRequest = NSMutableURLRequest(URL: url) 
    muableRequest.setValue("WhateverYouWant", forHTTPHeaderField: "x-YourHeaderField") 

    let task = session.dataTaskWithRequest(muableRequest) { (data, response, error) in 

     guard error == nil else { 
      print("We have an error :(\(error)") 
      // Here, you have to handle the error ... 
      return 
     } 

     if let response = response { 
      var mimeType = "" 
      if response.MIMEType != nil { 
       mimeType = response.MIMEType! 
      } 

      var encoding = "" 
      if response.textEncodingName != nil { 
       encoding = response.textEncodingName! 
      } 

      if let httpResponse = response as? NSHTTPURLResponse { 
       print("HTTP Status code is \(httpResponse.statusCode)") 
      } 

      self.webView.loadData(data!, MIMEType: mimeType, textEncodingName: encoding, baseURL: url) 
     } 
    } 
    task.resume() 
} 

そして、あなたはそのように、このメソッドを呼び出します:ここではあなたが何ができるかの一例である

loadURL(NSURL(string: "https://apple.com")!) 

あなたが前にこれをやっていた場所で:

webView.loadRequest(NSURLRequest(URL: NSURL(string: "https://apple.com")!)) 
+0

あなたの答えをありがとう、私は今それを試してみます。 私が今得ているのは、これらの2つのヘッダーだけです。 'Cache-Control:public、max-age = 3600' ' Expires:Thu、2020年8月25日08:44:31 GMT' サーバーから別のものを追加する必要がありますか? –

+0

Ho、この場合、 'dataTaskWithURL'ではなく' dataTaskWithRequest'を使うべきです。私はあなたの必要に合わせて自分の答えを編集しました。 –

+0

はい、今働いています、ありがとうございます。しかし、ヘッダーがCache-Control:public、max-age = 3600、Expires:Thu、25 Aug Aug 2016 08:44:31 GMTだけ戻ってきているのを教えてもらえますか? –

関連する問題