Получение кеша UIWebView? - PullRequest
       29

Получение кеша UIWebView?

1 голос
/ 04 марта 2012

Я пытаюсь убедиться, что у меня всегда есть обновленная кэшированная копия 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];

В большинстве случаев работает нормально, за исключением случаев перехода в режим полета без остановки приложения. В режиме «В самолете» кэшированный веб-вид прекрасно отображается, НО делегат UIWebView

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

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

1 Ответ

4 голосов
/ 05 марта 2012

ОК. Я решил эту проблему, указав код ошибки в методе делегата 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]);
}
...