0

我有一个类 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];
}

如果 Am 调用 URLCache.m 那么 A 需要将参数 _pageType 发送到 URLCache,我不知道如何发送 _pageType。我试过了

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

但每次在上午

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

得到

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

为什么不能将参数发送到 NSURLCache?

如何发送_pageType?

4

1 回答 1

1
[NSURLCache sharedURLCache]

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

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

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

这就是[sharedCache setPageType:...]引发异常的原因。

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

所以你必须首先创建你的URLCache类的一个实例,然后你可以将它设置为共享实例

[NSURLCache setSharedURLCache:...]
于 2012-11-13T18:07:20.433 回答