2014-09-15 15 views
6

In iOS 7 konnte ich einen gemeinsamen URL-Cache auf eine Unterklasse von NSURLCache setzen und alle UIWebView s ich erstellt würde diesen gemeinsamen Cache automatisch für jede Anfrage verwenden.Shared NSURLCache und UIWebView auf iOS 8

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

jedoch jetzt in iOS 8 es scheint nicht, wie UIWebView aus dem gemeinsam genutzten Cache zieht und cachedResponseForRequest wird nie aufgerufen.

Hat jemand Dokumentation für diese Änderung oder eine Problemumgehung gefunden?

Antwort

10

Ich hatte das gleiche Problem heute. Es war ok auf ios7 und gebrochen auf ios8.

Der Trick besteht darin, einen eigenen Cache als erstes in didFinishLaunchingWithOptions zu erstellen.

- (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]; 

... 

Sie können in anderen Anwendungen geschehen sehen dies wird:

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

Diese Seite, während alte, mehr Informationen darüber, warum hat man nicht einmal anrufen sollte [NSURLCache sharedInstance] vor dem oben code: http://inessential.com/2007/02/28/figured_it_the_heck_out

+1

Cool, habe ich am Ende mein spezifisches Problem behoben, indem ich einen anderen Ansatz benutze, der die Implementierung eines benutzerdefinierten 'NSURLProtocols 'beinhaltet. Wenn jemand den Code sehen möchte, erwähne mich hier und ich füge ihn hinzu. –

+0

@ JonWillis, bitte teilen Sie Code =) –