"NSURLSession sharedSession" 不是 NSURLSession

"NSURLSession sharedSession" is not kind of NSURLSession

我为 NSURLSession 创建了类别,然后我遇到了问题。在iOS7、[[NSURLSession sharedSession] isKindOfClass:[NSURLSession class]]returnsNO

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

我该如何解决这个问题?是否有任何我可以使用的运行时魔术功能?因为

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

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

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

实例的 class 方法

假设类别如下:

@interface NSURLSession (MyCategory)

- (void)doSomethingWithCompletion:(MyCompletionHandler)completionHandler;

@end

替换可以是:

@interface NSURLSession (MyCategory)

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

@end

用法如下:

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