“NSURLSession sharedSession”不是NSURLSession的一种

时间:2015-08-07 10:47:34

标签: ios objective-c nsurlsession objective-c-runtime

我为NSURLSession创建了类别,然后我遇到了问题。在iOS 7中,[[NSURLSession sharedSession] isKindOfClass:[NSURLSession class]]返回NO

我知道[NSURLSession sharedSession]正在返回__NSCFURLSession的实例,但它不是NSURLSession的子类。所以,它没有任何意义。在编译时,每个都可以,但在运行时我得到无法识别的选择器异常。

我怎样才能解决这个问题?是否有任何运行时魔术功能,我可以使用?因为

[[NSURLSession sharedSession] respondsToSelector:@selector(dataTaskWithRequest:completionHandler:)]

返回YES,这是我在我的类别中使用的唯一方法。

1 个答案:

答案 0 :(得分:1)

作为在类别中创建实例方法的替代方法,您可以创建一个接受NSURLSession实例的类方法。

假设这样的类别:

@interface NSURLSession (MyCategory)

- (void)doSomethingWithCompletion:(MyCompletionHandler)completionHandler;

@end

替换可能是:

@interface NSURLSession (MyCategory)

+ (void)doSomethingWithSession:(NSURLSession *)session completion:(MyCompletionHandler)completionHandler;

@end

用法如下:

[NSURLSession doSomethingWithSession:[NSURLSession sharedSession]
                          completion:^{ ... }];