iPhone 응용 프로그램을 쓰고 있습니다. 그 중 하나는 탭 피드이며, 나는 twitter xml을 구문 분석하고 테이블보기 안에 멋지게 넣습니다. 인터넷에 연결되어 있지 않은 경우 마지막으로 인터넷에 연결되어있는 테이블의 캐시 결과를 표시하고 테이블을 업데이트하고 싶습니다. 나는과 같이 그것을 위해 NSURLCache을 사용하고 있습니다 : (. http://www.twitter.com/..)NSURLCache 캐시 응답 문제
이NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:xmlLink]
cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60];
NSURLCache *sharedCache = [NSURLCache sharedURLCache];
NSCachedURLResponse *response = [sharedCache cachedResponseForRequest:theRequest];
if (response) {
NSLog(@"Got Response");
} else {
NSLog(@"Didn't got Response");
}
self.objectFeedConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self startImmediately:YES] autorelease];
나는 그것이이 웹 사이트 내가 할 수있는 방문이 처음이기 때문에 NSLog 출력은 "응답을 가지고하지 않았나요"처음 것을 알 수 있습니다 "
- (NSCachedURLResponse *) connection:(NSURLConnection *)connection
willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
NSLog(@"willCache Reponse");
NSCachedURLResponse *newCachedResponse = nil;
if ([[[[cachedResponse response] URL] scheme] isEqual:@"http"]) {
newCachedResponse = [[[NSCachedURLResponse alloc]
initWithResponse:[cachedResponse response]
data:[cachedResponse data]
userInfo:nil
storagePolicy:[cachedResponse storagePolicy]]
autorelease];
}
return newCachedResponse;
}
이이 사이트를 방문 두 번째 시간은 내가 명확하게 NSLog 출력을 볼 수 있습니다 또한 내가 initWithRequest이 출시 된 후 지금처럼 호출되는 willCacheResponse 방법을 구현하기 때문에 응답이 캐시되고 있음을 볼 수 Got Response "는 캐시 히트가 있었으므로 willCacheResponse를 의미합니다. 이 아니라면이 다시 호출되지만 이상한 이유로 다시 호출되고 정보를 캐시에서 꺼내지 않고 다시 캐싱하려고 시도합니다.
이 문제의 원인은 무엇입니까?
감사합니다. 내가 제대로 질문을 이해한다면
내가 정책의 모든 종류의 시도를. 기본적으로 NSURLRequestUseProtocolCachePolicy를 사용해야합니다. 인터넷 연결이있을 경우 항상 원격지에서로드하고, 그렇지 않으면 캐시에서로드합니다.하지만 둘 다 나에게 같은 문제가 발생합니다. – djTeller