以下代码是从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框架编译为静态库。调用是在同一个库中进行的。当我将它编译为exe时,它运行起来没有任何问题。
发布于 2011-10-22 04:37:49
您需要使用-ObjC链接器选项将静态库和最终可执行文件链接起来。
-JSONValue方法作为文件NSString+SBJSON.m文件中NSString类的一个类别来实现。由于Objective-C中动态运行时的工作方式,静态库中定义的类别不会加载,除非您使用-Objc标志进行链接。如果类别没有加载,那么动态绑定就会失败,你会得到可怕的“不响应选择器”异常。
https://stackoverflow.com/questions/7854785
复制相似问题