0

クラス URLCache extends 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 は param _pageType を URLCache に送信する必要があります。_pageType を送信する方法がわかりません。

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

でもいつも午前中

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

得た

キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[NSURLCache setPageType:]: 認識されないセレクターがインスタンス 0xabd1470 に送信されました'

param を NSURLCache に送信できないのはなぜですか?

_pageType を送信するには?

4

1 に答える 1

1
[NSURLCache sharedURLCache]

共有URLキャッシュインスタンスを返します。でカスタムインスタンスを設定していない場合setSharedURLCache:、これはNSURLCacheオブジェクトです。

型キャスト(URLCache *)はオブジェクトを変更せず、オブジェクトに「変換」しませんURLCache。あなたはそれを確認することができます

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

[sharedCache setPageType:...]これが、例外をスローする理由です。

initializeまた、これは、そのクラスのインスタンスが作成される前に1回実行される特別なクラスメソッドであることに注意してください(ここでの適切な説明とリンク:Objective-C:init vs initialize)。_pageTypeしたがって、でチェックインすることは意味がありませんinitialize

したがって、URLCache最初にクラスのインスタンスを作成する必要があります。次に、このインスタンスを共有インスタンスとして設定できます。

[NSURLCache setSharedURLCache:...]
于 2012-11-13T18:07:20.433 に答える