我为NSURLSession
创建了类别,然后我遇到了问题。在iOS 7中,[[NSURLSession sharedSession] isKindOfClass:[NSURLSession class]]
返回NO
。
我知道[NSURLSession sharedSession]
正在返回__NSCFURLSession
的实例,但它不是NSURLSession
的子类。所以,它没有任何意义。在编译时,每个都可以,但在运行时我得到无法识别的选择器异常。
我怎样才能解决这个问题?是否有任何运行时魔术功能,我可以使用?因为
[[NSURLSession sharedSession] respondsToSelector:@selector(dataTaskWithRequest:completionHandler:)]
返回YES
,这是我在我的类别中使用的唯一方法。
答案 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:^{ ... }];