与SBJSON库崩溃

时间:2011-10-21 20:16:15

标签: objective-c

以下代码是从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时,它运行没有任何问题。

1 个答案:

答案 0 :(得分:1)

您需要使用-ObjC链接器选项链接静态库和最终可执行文件。

-JSONValue方法在文件NSString文件中的NSString+SBJSON.m类上实现为类别。由于动态运行时在Objective-C中的工作方式,静态库中定义的类别不会被加载,除非您使用-Objc标志进行链接。如果没有加载类别,那么动态绑定将失败,并且您将获得可怕的“不响应选择器”异常。