2016-08-18 5 views
2

Я сталкиваюсь проблема с UIWebView в webViewDidFinishLoad, и я получаюUIWebView request.response = ноль Issue

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

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

    } 
} 

, как nil, так что я не могу проверить код состояния в то время как тело показано на рисунке. Пожалуйста, где будет проблема? Есть ли что-то, что я могу сделать с серверной стороны?

Редактировать: от других запросов я могу видеть ответ.

+0

ваш URL является загруженные средства видимы или нет –

+0

@ Anbu.Karthik Извините, я вас не понял, что вы подразумеваете под видимым или нет? –

+0

Всегда ли это происходит? Или только по некоторому URL? –

ответ

0

Итак, я думаю, это потому, что вы проверяете NSURLCache, чтобы получить ответ на свой запрос. Но иногда ваша страница может отображаться, но не кэшироваться. Действительно, сервер может ответить примерно так:

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

В нем говорится: «Вы не должны полностью кэшировать мой ответ». Как хороший гражданин, iOS не делают :). Таким образом, мы должны использовать другой способ вернуть ответ сервера. Я думаю, что лучшим решением является использование NSURLSession, чтобы сделать ваш запрос, загрузить контент и переслать его на ваш веб-просмотр. Когда запрос будет выполнен, вы сможете получить доступ к ответу - обработчик завершения. Вот пример того, что вы можете сделать:

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

Спасибо за ваш ответ. Я попробую сейчас. Теперь я получаю только эти два заголовка. 'Cache-Control: public, max-age = 3600' ' Истекает: Чт, 25 авг 2016 08:44:31 GMT' Следует ли добавить что-то еще с сервера? –

+0

Ho, в этом случае мы должны использовать 'dataTaskWithRequest' не' dataTaskWithURL'. Я только что отредактировал свой ответ, чтобы он соответствовал вашим потребностям. –

+0

Да, сейчас он работает, спасибо. Но не могли бы вы сказать мне, пока заголовок возвращается только Cache-Control: public, max-age = 3600 и Expires: Thu, 25 августа 2016 08:44:31 GMT, должно ли это работать? –

 Смежные вопросы

  • Нет связанных вопросов^_^