以下代码是从Stig Brautaset JSON库复制的 - 我删除了评论更清晰。
@interface NSString (NSString_SBJSON)
- (id)JSONFragmentValue;
- (id)JSONValue;
@end
我打电话时遇到了崩溃:
NSString *jsonString = [request responseString];
...
NSDictionary *results = [jsonString JSONValue];//here is the crash with invalid selector.
我补充说:
if (![jsonString respondsToSelector:@selector(JSONValue)])
{
NSLog(@"fix this!!!\n");
}
并显示消息。你知道为什么这个函数没有调用吗?
谢谢!
编辑:我将JSON框架编译为静态库。调用在同一个lib中进行。 当我将其编译为exe时,它运行没有任何问题。答案 0 :(得分:1)
您需要使用-ObjC
链接器选项链接静态库和最终可执行文件。
-JSONValue
方法在文件NSString
文件中的NSString+SBJSON.m
类上实现为类别。由于动态运行时在Objective-C中的工作方式,静态库中定义的类别不会被加载,除非您使用-Objc
标志进行链接。如果没有加载类别,那么动态绑定将失败,并且您将获得可怕的“不响应选择器”异常。