iphone - 如何将 NSCachedURLResponse 传递给解析器委托(delegate)?

标签 iphone ios parsing nsurlconnection

我目前正在从我的服务器下载并缓存几个不同的数据集。不过,我正在将所有代码从 ASI 替换为 NSURLConneciton 内容。我现在已经准备好将缓存传递给解析器委托(delegate),但是它们接受 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 定义,它说 NSCachedURLResponse 具有我想要的数据,我只是不确定如何获取它......与我的解析器委托(delegate)一起使用。

最佳答案

你的意思是这样的吗?

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]]; 调用在应用程序委托(delegate)中设置全局应用程序缓存。

然后,所有标准 NSURL-无论什么类都会表现得好像它们与系统缓存一起工作,并且您通常不必处理直接调用来获取或存储缓存,系统会自动调用它们。

关于iphone - 如何将 NSCachedURLResponse 传递给解析器委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353057/

相关文章:

iphone - 应用内购买 - 消耗品

iphone - UIDevice currentDevice 的 "orientation"始终为 null

iphone - 核心动画: How to make a page flipping transition?

ios - 如何在 iOS 中使用 Twitter/社交框架获取关注者和关注者

php - 使用 API v3 从 PHP 中的 videoid 获取 youtube 标题

ios - 无用的 Swift iOS 崩溃报告

iphone - 在 UISplitViewController 中设置主视图的显示/隐藏启用,仅用于横向模式下的一个 View Controller

ios - 一种用于 iOS 应用程序而不是 Storyboard的手动页面布局策略

java - StAX XML 解析器未转义单引号 (')

c - 使用 C 中的 strtok 解析配置中的字符串