2012-03-04 1 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デリゲートメソッドでエラーコードを特定して解決しました。私は、キャッシュが空(「リソースが利用できません」)で、キャッシュ内のデータが-1009のときにエラーコードが-1008であることを発見しました(「インターネット接続はオフラインになっています」)。飛行機モードではどちらの場合もオフラインです。

- (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]); 
} 
関連する問題