2014-01-20 1 views
0

이전 작업에 따라 다른 URL을로드하는 iOS 앱에 UIWebView이 있습니다. 나는이 페이지들이 가능한 한 빨리 로딩되는 것을 원하지 않는다. 나는 EGOCache (source) 클래스를 발견했으며, 라이브러리/캐시 디렉토리에 cacheData를 저장하도록했습니다. 하지만이 캐시를 검색하여 더 빨리로드하는 방법을 모르겠다면 그 차이를 알 수 없습니다. 어쩌면 NSCache를 사용합니까? 나는 무엇을 놓쳤는가?EGOCache를 사용하여 페이지를 더 빨리 캐시하고로드하는 방법

- (void)webViewDidStartLoad:(UIWebView *)webView { 
     if (webView_1) { 


     NSString *urlAddress = @"http://www.apple.com"; 
     NSURL *url = [NSURL URLWithString:urlAddress]; 
     NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval: 10.0]; 
     [webView1 loadRequest:request]; 

     NSData *data0 = [NSURLConnection sendSynchronousRequest: 
         [NSURLRequest requestWithURL:url] 
              returningResponse:nil 
                 error:nil]; 

     [[EGOCache globalCache] setData:data0 forKey:@"webCache"]; 
     } 
    } 

고마워요!

답변

2

좋아요. 그래서 제 자신의 방법을 만들어 냈습니다. URL 주소를 제공하기 만하면됩니다. 이 코드를 참조하십시오 :

-(void)loadPage:(NSString *)urlAddress { 

    NSURL *url = [NSURL URLWithString:urlAddress]; 
    NSString* cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString* file = [cachePath stringByAppendingPathComponent:@"/xxx.APPNAME/EGOCache/EGOCache.plist"]; 
    NSDictionary *dict =[NSDictionary dictionaryWithContentsOfFile:file]; 

    if ([dict objectForKey:urlAddress]) 
    { 
     NSData *data = [[EGOCache globalCache] dataForKey:urlAddress]; 
     data = [NSURLConnection sendSynchronousRequest: 
       [NSURLRequest requestWithURL:url] 
            returningResponse:nil 
               error:nil]; 
     NSLog(@"loading from cache %@",urlAddress); 

    }else{ 
     NSData *data = [NSURLConnection sendSynchronousRequest: 
         [NSURLRequest requestWithURL:url] 
               returningResponse:nil 
                  error:nil]; 
     [[EGOCache globalCache] setData:data forKey:urlAddress]; 
     NSLog(@"saving cache %@",urlAddress); 
     [[EGOCache globalCache] setDefaultTimeoutInterval:60*60*24*4]; //timeout (4 days) 
    } 
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval: 10.0]; 

    [webView loadRequest:request]; 
} 
0

구현하고자하는 것을 달성하려면 NSURLCache의 서브 클래스를 만들고 필요한 메소드를 구현해야하며 구현시 EGOCache에 액세스해야합니다. UIWebView 및 NSURLConnection은 데이터 캐싱에 NSURLCache를 사용합니다. 사용자 정의 하위 클래스를 구현 한 후에는 setSharedCache:을 사용하여 인스턴스를 애플리케이션의 URL 캐시로 설정합니다.

+0

나를 보여줄 수있는 코드 또는 자습서가 있습니까? 나는 초저녁 미안하다 ... – Tibbe