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