2012-03-04 3 views
1

Я пытаюсь, чтобы убедиться, что у меня всегда есть до даты кэшируются копии UIWebView, используя следующий код:Получение кэша UIWebView?

// Set URL to help file on server 
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", HELP_FILE_URL]]; 

// Check network reachability 
wifiReach = [Reachability reachabilityWithHostName:[NSString stringWithFormat:@"%@", SERVER_URL]]; 
netStatus = [wifiReach currentReachabilityStatus]; 

// Start activity indicators 
[self startAnimation]; 

// Verify current help file cache if we have network connection... 
if (netStatus == ReachableViaWWAN || netStatus == ReachableViaWiFi) { 

    helpFileRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:30]; 

} else { 

    // Network NOT reachable - show (local) cache if it exists 
    helpFileRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataDontLoad timeoutInterval:30]; 
} 

// Show help file in a web view 
[webView loadRequest:helpFileRequest]; 

Он отлично работает в большинстве случаев за исключением случаев, когда я иду в режим полета, не выключая приложение. После того, как в режиме полета в кэше Webview появляется хорошо, но UIWebView делегат

(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 

также срабатывает, которые я не хочу. Я хочу, чтобы это было вызвано, если кеш пуст! Как я могу это достичь? (Если я завершаю приложение, он отлично работает.) Это небольшая деталь, но я действительно хочу, чтобы она работала правильно :)

ответ

4

OK - я решил ее, указав код ошибки в делетете UIWebView - см. Ниже. Я обнаружил, что код ошибки -1008, когда кеш пуст («ресурс недоступен») и -1009 с данными в кеше («Подключение к Интернету отключено»). Оба случая отключены в режиме полета.

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{ 
    NSLog(@"%@ : %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd)); 

    [self stopAnimation]; 

    // No help to display - cache is empty and no Internet connection... 
    if ([error code] == -1008) { 
     NSString *alertMessage = @"To make Help available offline, you need to view it at least once when connected to the Internet."; 
     UIAlertView *alertView = 
     [[UIAlertView alloc] initWithTitle:@"Help Unavailable" 
           message:alertMessage 
           delegate:nil 
        cancelButtonTitle:@"OK" 
        otherButtonTitles:nil]; 
     [alertView show]; 
    } 

    NSLog(@"Error code:%d, %@", [error code], [error localizedDescription]); 
} 
Смежные вопросы