2013-03-06 20 views
8

UIWebView'e bir istek gönderiyorum. Yüklenen web sayfasında AJAX çağrıları var. Kullanıcının giriş yapıp yapmadığını belirlemek için AJAX trafiğini analiz etmem gerekiyor. Bunu yaparken ben AppDelegate bir NSURLCache yüklü:NSCachedURLResponse nesneyi döndürür, ancak UIWebView içeriği yorumlayamaz

MYURLCache *cache = [[MYURLCache alloc] init]; 
[NSURLCache setSharedURLCache:cache]; 

Bu MYURLCache sınıf düzgün Web görünümündeki geçiyor trafiğini alır. Sadece AJAX çağrılarını sonlandırabilirim. Daha sonra AJAX çağrılarının kendi isteğini ben yarattım. Bu, web sunucusundan mükemmel yanıtı döndürür. Şimdi yapmak için son adım, NSCachedURLResponse iade nesnesini oluşturmaktır. Bunu da yaptım, ancak web görüntüsü nesneleri döndürürken hiçbir şey yapmaz. Eğer sadece geri dönmezsem, WebView herşeyi yükler (NSURLCache için bir mesaj değildir, hiçbir şey önbelleğe alınmaz, bu yüzden web sayfası kendi başlarına yüklemeye başlamalıdır).

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request { 
    if ([[[request URL] absoluteString] rangeOfString:@"/ajax/"].location == NSNotFound) { 
     return nil; 
    } else { 

    ASIHTTPRequest *asirequest = [ASIHTTPRequest requestWithURL:[request URL]]; 
    [asirequest setValidatesSecureCertificate:NO]; 
    [asirequest startSynchronous]; 
    NSError *error = [asirequest error]; 
    NSData* data = [[asirequest responseString] dataUsingEncoding:NSUTF8StringEncoding]; 

    // Create the cacheable response 
    NSURLResponse *urlresponse = [[NSURLResponse alloc] initWithURL:[request URL] MIMEType:@"application/json" expectedContentLength:[data length] textEncodingName:@"UTF-8"]; 
    NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data]; 

    NSLog(@"cachedResponse %@", cachedResponse); 
    NSLog(@"cachedResponse data %@", [[NSString alloc] initWithData:[cachedResponse data] encoding:NSUTF8StringEncoding]); 

    return cachedResponse; 
} 

return nil; 
} 

cevap

8

Bu soruna bir çözüm buldum ... Sanırım eksik olan başlıklarla ilgili bir şey var.

Ben herşeyi çalışır

NSHTTPURLResponse *urlresponse = [[NSHTTPURLResponse alloc] initWithURL:request.URL statusCode:200 HTTPVersion:@"1.1" headerFields:nil]; 
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data]; 

ile

NSURLResponse *urlresponse = [[NSURLResponse alloc] initWithURL:[request URL] MIMEType:@"application/json" expectedContentLength:[data length] textEncodingName:@"UTF-8"]; 
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data]; 

değiştirin. Ek olarak bu cevap, isteğin ek özel üstbilgisini önerdi. https://stackoverflow.com/a/15234850/274518

Benim durumumda buna ihtiyacım yoktu.

+0

uiwebview'in offline olarak çalışmasını istiyorum. Http://stackoverflow.com/a/17149902/935381 ve belge dizininde yanıt depoladım. Ancak çevrimdışı modda bunu NSData * sData = (NSData *) [NSData dataWithContentsOfFile: filePath] kullanarak erişmeye çalıştığımda; [webview loadData: sData MIMEType: @ "text/html" textEncodingName: nil baseURL: nil]; ancak uygun içeriği göstermiyor. kodlama verisini değiştiriyor ... – Hitarth

+0

gerçekten bana yardımcı oldu – kevinl