как передать NSCachedURLResponse делегатам Parser? - PullRequest
0 голосов
/ 20 февраля 2012

В настоящее время я загружаю и кэширую несколько разных наборов данных с моего сервера.Однако я перекладываю весь свой код с ASI на NSURLConneciton.и я нахожусь в точке, где я готов передать свои кэши моим делегатам парсера, однако они принимают тип NSData в качестве параметра

- (void)startTheParsingProcess:(NSData *)parserData

, где мой кэш имеет тип

NSCachedURLResponse

как вы можете видеть здесь

-(NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
    if (dataSetToParse == @"a"){
        NSCachedURLResponse *aCachedResponse = cachedResponse;

        aCachedResponse = nil;
        NSDictionary *newUserInfo;
        newUserInfo = [NSDictionary dictionaryWithObject:[NSDate date] forKey:@"Cached Date"];
        aCachedResponse = [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] data:[cachedResponse data] userInfo:newUserInfo storagePolicy:[cachedResponse storagePolicy]];
        NSLog(@"%@", aCachedResponse);
        return aCachedResponse;
    }
    if (dataSetToParse == @"b"){
        NSCachedURLResponse *bCachedResponse = cachedResponse;

        bCachedResponse = nil;
        NSDictionary *newUserInfo;
        newUserInfo = [NSDictionary dictionaryWithObject:[NSDate date] forKey:@"Cached Date"];
        bCachedResponse = [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse response] data:[cachedResponse data] userInfo:newUserInfo storagePolicy:[cachedResponse storagePolicy]];
        NSLog(@"%@", bCachedResponse);
        return bCachedResponse; 
    }
    return nil;

}

любой пример кода был бы полезен, спасибо или просто указал мне правильное направление:)

Я смотрю на определение NSCachedURLResponse в документах Apple., и это говорит, что NSCachedURLResponse имеет данные, которые я хочу, я просто не уверен, как я могу получить их ... чтобы использовать с моими делегатами синтаксического анализатора.

1 Ответ

1 голос
/ 20 февраля 2012

Вы имеете в виду что-то подобное?

NSCachedURLResponse *cachedResponse = nil; // Put your code to get real response
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)[cachedResponse response];
NSData *responseData = [httpResponse data];

NSCachedURLResponse также имеет прямой метод data, но я не могу проверить, совпадает ли это с кодом, приведенным выше.

Предложение кеша

Я вижу, что у вас есть свои собственные методы, которые имеют дело с кэшированием. Я бы предложил разделить NSURLCache на подклассы, если вам нужно изменить кэширование и, скажем, добавить автономный режим. Если вы создаете его подкласс и реализуете некоторые методы, например (но не ограничиваясь ими):

– cachedResponseForRequest:
– storeCachedResponse:forRequest:

жизнь может стать легче для вас. Вы бы просто установили глобальный кеш приложения в делегате приложения с помощью вызова [NSURLCache setSharedURLCache:[CustomURLCache new]];.

Тогда все ваши стандартные NSURL-классы будут вести себя так, как будто они работают с системным кешем, и вам обычно не придется иметь дело с прямыми вызовами, чтобы получить или сохранить кеш, система вызовет их автоматически.

...