2016-08-18 3 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은 : 당신이 전에이 일을 한 장소에서

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

을 로드 된 수단이 보이지 않습니까? –

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

는 그리고이 같은 메서드를 호출 :

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

답변 해 주셔서 감사합니다. 지금 내가 얻고있는 것은이 두 헤더뿐입니다. 'Cache-Control : public, max-age = 3600' '만료 : 2014 년 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를 반환하는 동안 알려 주실 수 있습니까? –