UIWebView
에서 2 가지를 해결하려고합니다.UIWebView 및 NSURLCache 문제가있는 관계가 있습니다.
- 올바른 조건에서 원격 자산 대신 로컬 자산로드
- 로컬 자산이 없거나 으로 오래된 경우 원격 자산을 정상적으로로드하십시오. 그래서 # 1과 # 2를 다루기 위해 xxx29 사용자 정의 서브 클래스를 구현했습니다. webview가 애셋을 요청할 때 호출되고, 대신 로컬 애셋에 대한 서버 호출을 중단하여 로컬 애셋을 보낼 수 있습니다. 로컬 버전이 오래되었거나 사용할 버전을 알 수없는 작은 타임 스탬프 시스템도 있습니다.
NSCachedURLResponse
은 기본 HTML 요청에 대해NSCachedURLResponse
을 요청하지만 무시되고 무시됩니다.NSURLCache
은NSURLCache
에 요청으로로드 할 경우NSURLCache
에 요청하지만 HTML 또는 데이터를로드 할 때 캐시를 완전히 무시하고 원격 서버에서 직접 요청합니다.
그러나 # 3은 나를 위해 루프를 던지고 있습니다. 캐시 제어 헤더와 상관없이 UIWebView
은 돌아갈 때 항상 HTML을 다시로드합니다.
그래서 사용자 지정 NSURLCache
클래스의 HTML 캐싱을 강제로 시도했습니다. 그것은 작동하는 것, 내가 원하는 HTML NSCachedURLResponse
의 인스턴스를 반환하지만, UIWebView
통지에 실패하고 어쨌든 서버에서로드합니다. 일부 검색 후에 UIWebView
및 URL 캐시에 "불일치"가 있음을 알 수 있습니다. 애셋에 적합하지만 표시하려는 페이지를 구성하는 HTML에는 적합하지 않습니다.
그렇다면이 방법이 효과가 없을 수 있으므로 수동으로 해보십시오. 나는 수동으로 가져 와서 loadData:MIMEType:textEncodingName:baseURL:
로로드하는 URL 스택과 데이터를 만들었습니다. 소호하고 위대한 일을 한 것처럼 보입니다! 이제 다시 돌아갈 수 있습니다. 웹보기 대리인이로드를 가로 채고 수동으로 가져온 데이터를로드하도록 지시하고 서버에 적중되지 않게 할 수 있습니다.
그런데 NSURLCache가 더 이상 내 자산에 사용되지 않는다는 것을 알았습니다. loadRequest:
으로 컨텐츠를로드하고 baseUrl
세트가 올바르게 설정된 데이터 또는 html 문자열을로드하지 않으면 캐시 된 자산 만 묻는 것 같습니다.
그래서 모든 노력에도 불구하고 조건부로 로컬 자산을로드하고 서버를 치지 않고 다시 탐색 할 수있는 웹보기를 만들 수 없습니다. SDK에 몇 가지 버그가있는 것 같습니다.
UIWebView
UIWebView
은 HTML 내용에 대해 서버
Cache-Control
헤더를 무시합니다.
그래서 처음에는 누구나 이러한 것들에 대한 해결책을 볼 수 있습니까? 둘째, 어리석은 이유가 SDK 버그가 아닙니다.
좋은 아이디어 - 이것도 메모리 할당을 줄여주기 때문에 - 그물이나 캐시에서 @ runtime을 가져와야하는 이미지 자산은 어떨까요? 나는 언젠가는 그것을 풀어 줘야하지만 확실하지는 않다. 내 시도는 다음과 같다. http://stackoverflow.com/questions/3215641/overriding-nsurlcaches-cachedresponseforrequest-to-cache-uiwebview-assets-with-t –
당신은 할 수있다. 정말로. 원격 콘텐츠와 로컬 콘텐츠를 혼합하는 것은 큰 문제로 보입니다. NSURLCache 재정의는 광고 된대로 실제로 작동하지 않습니다. 그러나 콘텐츠가 로컬에서 시작되고'file : // '스타일 URL이로드되면 원격 자산과 로컬 자산을 잘 참조 할 수 있습니다. 하지만 그것은 수동으로 html, css, js 등의 로컬 복사본을 다운로드해야한다는 것을 의미합니다. 작동하지만 여전히 쉽지는 않습니다. –