2016-08-18 4 views
2

Ich Begegnung ein Problem von UIWebView im webViewDidFinishLoad und ich bin immerUIWebView request.response = nil Ausgabe

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

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

    } 
} 

als nil so kann ich nicht den Statuscode überprüfen, während der Körper gezeigt. Bitte wo wäre das Problem? Gibt es etwas, was ich von der Serverseite aus tun kann?

Edit: von anderen Anfragen kann ich die Antwort sehen.

+0

Ihre URL ist geladen bedeutet, sichtbar oder nicht –

+0

@ Anbu.Karthik Es tut mir leid, ich habe dich nicht verstanden, was meinst du mit sichtbar oder nicht? –

+0

Passiert es immer? Oder nur auf einer URL? –

Antwort

0

Also, ich denke, das ist, weil Sie NSURLCache überprüfen, um Ihre Anfrage Antwort zu bekommen. Aber manchmal kann Ihre Seite zwar angezeigt, aber nicht zwischengespeichert werden. In der Tat kann der Server etwas in der Art antworten:

Es sagt: "Sie sollten meine Antwort absolut nicht zwischenspeichern". Als ein guter Bürger, iOS nicht :). Also müssen wir einen anderen Weg wählen, um die Serverantwort zurückzubekommen. Ich denke, die beste Lösung ist, NSURLSession zu verwenden, um Ihre Anfrage zu stellen, den Inhalt herunterzuladen und es zu Ihrem Webview weiterzuleiten. Wenn die Anfrage gemacht wird, können Sie auf die Antwort, den Beendigungshandler, zugreifen. Hier ist ein Beispiel dafür, was Sie tun können:

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() 
} 

Und Sie rufen diese Methode wie folgt aus:

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

An der Stelle, Sie taten dies vor:

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

Vielen Dank für Ihre Antwort Ich werde es jetzt versuchen. Was ich jetzt bekomme, sind nur diese zwei Header. 'Cache-Control: public, max-age = 3600' ' Läuft ab: Do, 25 Aug 2016 08:44:31 GMT' Sollen wir etwas anderes vom Server hinzufügen? –

+0

Ho, in diesem Fall sollten wir 'dataTaskWithRequest' nicht' dataTaskWithURL' verwenden. Ich habe meine Antwort so bearbeitet, dass sie genau Ihren Bedürfnissen entspricht. –

+0

Ja, es funktioniert jetzt, danke. Kannst du mir aber sagen während der Header gerade Cache-Control zurückgibt: public, max-age = 3600 und Läuft ab: Do, 25 Aug 2016 08:44:31 GMT, sollte es funktionieren? –