Я пишу приложение для iPhone, одна из его вкладок - твиттер, я разбираю твиттер xml и красиво помещаю его в табличное представление.
Если нет подключения к Интернету, я бы хотел показать результаты кеша, когда в последний раз у нас было подключение к Интернету, и таблицы были обновлены.
Я использую 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 впервые выдает «Не получил ответа», поскольку впервые посещает этот сайт (http://www.twitter.com/...)
Я также вижу, что ответ кэшируется, так как я реализовал метод willCacheResponse, который вызывается после запуска initWithRequest, например:
- (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 выводит «Got Response», что означает, что произошел удар в кеше, поэтому willCacheResponse должен не вызываться снова, но по какой-то странной причине вызывается снова и снова и не извлекает информацию из кэша, вместо этого он пытается снова ее кэшировать.
Есть идеи, что вызвало эту проблему?
Спасибо!