2014-04-28 2 views
1

NSURLCache와 함께 AFNetworking을 사용 중입니다. 요청은 NSURLRequestUseProtocolCachePolicy으로 생성됩니다.NSURLCache를 사용하는 오프라인 모드

Etag = "1398684731"; 
Cache-Control = "public"; 

를 모든 것이 완벽하게 작동합니다 응용 프로그램은 헤더와 응답을받습니다. 하지만 이제 오프라인 모드를 추가해야합니다.

그것이 작동하는 방법 : 인터넷 연결을 사용할 수있는 모든 응용 프로그램은 새로운 데이터를 백엔드를 요청하고 Etag는 경우가있는 경우 다른 Etag 새로운 데이터가 다운로드됩니다 (보통 로 작동합니다입니다

  • 경우 동일한 캐싱 응답 이 사용됩니다.
  • 인터넷에 연결되어 있지 않으면 캐시 된 응답이 입니다.

오프라인 모드에서는 요청이 실패하는 것이 문제입니다.

다양한 Cache-Control 옵션을 사용하여이 문제를 해결하려고했지만이 방법으로는 작동하지 않는 것으로 보입니다.

여기서 가능한 해결책을 찾았습니다. https://stackoverflow.com/a/15885318/3140927. 그것은 잘 작동하지만 아주 우아하지는 않습니다. 나는 작년에 무언가가 바뀔 수도 있다고 생각합니다.

또한 "NSURLCache가 명시적인 오프라인 시나리오 용으로 만들어지지 않았으며 Safari의 속도를 높이기 위해 설계되었으므로 수동 다운로드에 사용해서는 안됩니다." SDURLCache가 내 용도로 더 좋을까요?

그럼 오프라인 모드를 구현하는 가장 좋은 방법은 무엇입니까?

+0

나는 URL 자체가 쉽게 수정할 수 있기 때문에 당신이 SDURLCache 및 AFNetworking를 사용한다, 또는, 그것은 당신이 AFNetworking를 사용하지 않는 문제를 해결 생각 당신은 자신의 NSURLConnection 클래스를 작성할 수 있지만, AFNetworking과 솔루션을 가지고 있기 때문에 우리는 – iphonic

답변

1

캐시에 데이터가 만료되어 서버에서 검색해야한다고해도 요청 성공을 원하는 것 같습니다. 부실 데이터가 오히려 실패한 특정 요청의 캐시 정책 (온라인 대 오프라인 정책이 다름)을 설정하는 것이 도움이 될 수 있습니다.

위대한 링크는 여기 -> SDURLCache with AFNetworking and offline mode not working

+0

으로 전환해야합니다. 고마워, 내 질문에 같은 링크가있다. 내가 원한 것은 맞춤 캐시 정책을 에뮬레이트하는 것입니다. "NSURLRequest_TryToLoad_ElseUseCache"와 같은 것입니다. – Avt

관련 문제