2014-09-15 3 views
6

В iOS 7 я смог установить общий кэш URL-адресов для подкласса NSURLCache, и любой созданный мной UIWebView, который я создал, автоматически использовал бы этот общий кэш для каждого запроса.Общие NSURLCache и UIWebView на iOS 8

// Set the URL cache and leave it set permanently 
ExampleURLCache *cache = [[ExampleURLCache alloc] init]; 
[NSURLCache setSharedURLCache:cache]; 

Однако теперь в прошивке 8 это не похоже UIWebView тянет из общего кэша и cachedResponseForRequest никогда не вызывается.

Кто-нибудь нашел документацию для этого изменения или обходной путь?

ответ

10

У меня была такая же проблема сегодня. Это было нормально на ios7 и сломано на ios8.

Фокус в том, чтобы создать свой собственный кеш, как первое, что вы делаете в didFinishLaunchingWithOptions.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // IMPORTANT: call this line before anything else. Do not call [NSURLCache sharedCache] before this because that 
    // creates a reference and then we can't create the new cache. 
    NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil]; 

    [NSURLCache setSharedURLCache:URLCache]; 

... 

Вы можете увидеть это делается в других приложениях:

https://github.com/AFNetworking/AFNetworking/blob/master/Example/AppDelegate.m

Этот сайт, в то время как старый, имеет больше информации о том, почему вы не должны даже назвать [NSURLCache sharedInstance] до того, как выше код: http://inessential.com/2007/02/28/figured_it_the_heck_out

+1

Прохладный, я решил исправить мою конкретную проблему, используя другой подход, включающий внедрение пользовательского 'NSURLProtocol'. Если кто-то хочет увидеть код, просто упомяните меня здесь, и я добавлю его. –

+0

@ JonWillis, пожалуйста, поделитесь с вами кодом =) –

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