我知道同样的问题有already been posted,但我认为我还面临另一个问题。
我创建了名为NSURLSession+PromiseKit的CocoaPod,允许将PromiseKit与NSURLSession一起使用。
我有定义:
@implementation NSURLSession (PromiseKit)
- (PMKPromise *)promiseDataTaskWithURL:(NSURL *)url {
return [PMKPromise ...];
}
@end
代码示例:
NSURLSession *session = [NSURLSession sharedSession];
NSURL *url = [NSURL URLWithString:@"..."];
[session promiseDataTaskWithURL:url].then( ^(NSData *data) {
NSLog(@"Result: %@", data);
}).catch( ^(NSError *e) {
NSLog(@"Error: %@", e);
});
适用于iOS 8,但不适用于iOS 7.我收到此错误:
由于未捕获的异常终止应用' NSInvalidArgumentException',原因:' - [__ NSCFURLSession promiseDataTaskWithURL :]:无法识别的选择器发送到实例0x7c236720'
现在当然我虽然未加载类别,但我将此行添加到podspec以确保代码已加载:
s.xcconfig = { 'OTHER_LDFLAGS' => '-ObjC -all_load' }
但效果不佳。
所以我在category file添加了一行:
+ (void)load {
NSLog(@"loaded");
}
令我惊讶的是调用了load
方法,这意味着代码确实被加载了。所以为什么在加载代码时执行时找不到类别方法?
答案 0 :(得分:1)
好的,经常发布问题会引导我找到答案。
NSURLSession不支持类别found。
NSURLSession
类为__NSCFURLSession
,不支持类别。__NSURLSessionLocal
,它支持类别。我的解决方案,虽然可以取代:
@implementation NSURLSession (PromiseKit)
人:
@implementation NSObject (PromiseKit)
仅限于实施文件。这将阻止Pod用户错误地使用除NSURLSession
对象之外的其他方法。然而,这并不妨碍他发挥其他技巧使事情崩溃......