Как использовать NSCachedURLResponse - PullRequest
3 голосов
/ 30 марта 2012

Я пытаюсь сохранить разные наборы данных, которые мне возвращаются с помощью методов NSURLConnection.

это мой метод connectionDidFinishLoading, который в данный момент передает каждую отдельную партию данных парсеру. С другой стороны, у меня есть политика кэширования NSURLMutableRequest, установленная на NSURLRequestUseProtocolCachePolicy

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{    
    if ([methodName isEqualToString:@"GetRub"]) 
    { 
        [engineResponses GetRub:receivedData];
    }
    else if ([methodName isEqualToString:@"GetMag"]) 
    {
        [engineResponses GetMag:receivedData];
    }
    else if ([methodName isEqualToString:@"GetSub"])
    {
        [engineResponses GetSub:receivedData];
    }
}

Повторное ограничение: вышеприведенный метод получает запрошенный набор данных и затем в зависимости от сделанного запроса передает эти данные правильному методу в классе синтаксического анализатора.

GetRub, GetMag, GetSub.

То, что я хочу попробовать и сделать здесь, - это использовать метод NSURLCacheResponse для захвата данных, как я делал выше, но затем проверить на наличие возможного кэша и т. Д., Если он есть, затем передать кэшированные данные парсеру, который обычно будет позаботился о методе, указанном выше.

Ниже приведено то, что я пробовал для своего кэша. Вместо того, чтобы connectionDidFinishLoading получал данные ... Я думаю, что я хочу, чтобы этот метод делал это, поэтому я попытаюсь вызвать метод engineResponses изнутри этого метода, как только кеш будет отсортирован.

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
    if ([methodName isEqualToString:@"GetRub"]) 
    { 
        NSCachedURLResponse *ICRub = cachedResponse;

        ICRub = nil;
        NSDictionary *newUserInfo;
        newUserInfo = [NSDictionary dictionaryWithObject:[NSDate date] forKey:@"Cached Date"];                                                                             
        ICRub = [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] data:[cachedResponse data] userInfo:newUserInfo storagePolicy:[cachedResponse storagePolicy]];                                                                     

    }
//other caches below here.

Так вот, что я пытался сделать, но в настоящее время он не работает, он никогда не подходит к этому методу. Кроме того, я не знаю, как отправить кэшированные данные в мой класс синтаксического анализатора. Это мои основные проблемы, другая проблема, как вы думаете, это очень хорошее решение?

любая помощь будет принята с благодарностью:)

...