Я собирался написать это несколько недель назад, и этот вопрос, наконец, заставил меня сделать это. См. Встроенное автономное кэширование для UIWebView (и NSURLProtocol) .
.
Краткий ответ, по моему опыту, заключается в том, что самым простым решением является использование NSURLProtocol
для перехвата NSURLConnection
запросов (в том числе сделанных UIWebView
) и записи результатов на диск. Если запрос сделан, когда вы не в сети, просто прочитайте ответ с диска и воспроизведите его. Это чрезвычайно прозрачно для остальной части приложения и позволяет избежать всех видов крайних случаев, связанных с подклассами NSURLCache
. (Для получения дополнительной информации о том, как создать подкласс NSURLCache
, см. Подстановка локальных данных для удаленных запросов UIWebView на Cocoa With Love и AFCache .)
Мой NSURLProtocol
подход очень прост и не является универсальным решением для кэширования. Он предназначен для помощи UIWebView
, когда вы не в сети. Но для этого, я думаю, это хорошо решает проблему.