链接闭源框架调用NSData扩展方法报错:无已知类方法'test'
问题:调用NSData分类方法时触发"No known class method for selector 'test'"错误
我最近用了一个闭源框架,它给NSData写了个分类,头文件testheader.h里的方法定义是这样的:
#import <Foundation/Foundation.h> @interface NSData (TestObj) - (id)test2:(id)arg1; - (id)test:(id)arg1; - (id)test3:(id)arg1; @end
但当我导入这个头文件,按下面的代码调用时:
#import "testheader.h" @implementation ViewController static void test_header_func () { NSData *test_var = [NSData test]; } @end
直接弹出了错误提示:
"No known class method for selector 'test'"
问题根源&解决办法
这问题其实很明确:你看头文件里的test:方法是实例方法(方法名前面的-标记就是实例方法的标识),但你调用的[NSData test]是在调用类方法(类方法是+开头的),两者完全不是一回事!
给你两个方向的解决方案:
- 如果本来就该调用实例方法:先创建NSData的实例,再调用方法,别忘了还要传参数(因为
test:是带一个参数的方法),比如改成这样:static void test_header_func () { NSData *test_var = [[NSData alloc] init]; id result = [test_var test:@"your_argument_here"]; } - 如果你确实需要调用类方法:那要么是你看错了方法名,要么是这个闭源框架的头文件漏了类方法的定义——但从现有头文件来看,所有方法都是实例方法,没有类方法版本的
test,你可以再检查下是不是把方法名写错了(比如是不是test2:或者test3:?不过它们也都是实例方法)。
内容的提问来源于stack exchange,提问作者user1341970
相关产品推荐
相关产品推荐

