扩展NSURLCache不能使用参数

时间:2012-11-13 16:17:57

标签: iphone objective-c ios nsurlcache

我有一个类URLCache扩展NSURLCache

URLCache.m中的

+ (void)initialize {

    NSString *_cacheSubFolder = nil;
    NSUInteger _cleanCacheFilesInterval;
    if (_pageType == FirstPage) {
        _cleanCacheFilesInterval = FirstPageCleanCacheFilesInterval;
        _cacheSubFolder = @"/WebCatchedFiles/FirstPage/";
    }else if (_pageType == SecondPage){
        _cleanCacheFilesInterval = SecondPageCleanCacheFilesInterval;
        _cacheSubFolder = @"/WebCatchedFiles/SecondPage/";
    }else if (_pageType == ThirdPage){
        _cleanCacheFilesInterval = ThirdPageCleanCacheFilesInterval;
        _cacheSubFolder = @"/WebCatchedFiles/ThirdPage/";
    }

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    cacheDirectory = [[paths objectAtIndex:0] stringByAppendingString:_cacheSubFolder];
//    cacheDirectory = [cacheDirectory stringByAppendingString:@"/"];
    removeFilesInCacheInDueTime(cacheDirectory, _cleanCacheFilesInterval);
    createDirectry(cacheDirectory);
    supportSchemes = [NSSet setWithObjects:@"http", @"https", @"ftp", nil];
}

如果A.m调用URLCache.m然后A需要将param _pageType发送到URLCache,我不知道如何发送_pageType。我试过

-(void)setPageType:(NSUInteger)pageType{
    _pageType = pageType;
}

但每次都在A.m

URLCache *sharedCache = (URLCache *)[NSURLCache sharedURLCache];
    [sharedCache setPageType:self.naviType];

得到了

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:' - [NSURLCache setPageType:]:   无法识别的选择器发送到实例0xabd1470'

为什么不能向NSURLCache发送参数?

如何发送_pageType?

1 个答案:

答案 0 :(得分:1)

[NSURLCache sharedURLCache]

返回共享URL缓存实例。如果您尚未使用setSharedURLCache:设置自定义实例,则这是NSURLCache对象。

类型转换(URLCache *)不会更改对象,也不会将其“转换”为URLCache对象。您可以使用

验证
NSLog(@"class = %@", [sharedCache class]);

这就是[sharedCache setPageType:...]抛出异常的原因。

另请注意,initialize是一个特殊类方法,它在创建该类的任何实例之前运行一次(这里有很好的解释和链接:Objective-C: init vs initialize)。因此,检查_pageType中的initialize是没有意义的。

因此,您必须首先创建URLCache类的实例,然后可以将其设置为

的共享实例
[NSURLCache setSharedURLCache:...]