无法通过YAJLiOS解析json数据

时间:2012-04-28 21:08:54

标签: iphone objective-c ios xcode yajl

首先,我正在尝试访问我的app文件夹中的本地文件:

    NSData *data = [NSData dataWithContentsOfFile:
                                      [@"countries.json" stringByExpandingTildeInPath]];

结果始终为NULL

然后我试图检查文件是否存在:

    NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString* foofile = [documentsPath stringByAppendingPathComponent:@"countries.json"];
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:foofile];

它不存在,我使用以下代码访问我的json文件:

    NSString *data1 = [[NSBundle mainBundle] pathForResource:@"countries" ofType:@"json"];
    NSData *data2 = [[NSData alloc] initWithContentsOfFile:data1];

它获取文件,但是当我尝试解析它时:

    NSDictionary *dict1 =[data2 yajl_JSON];

我收到错误:

    [NSConcreteData yajl_JSON]: unrecognized selector sent to instance 0x6838d60

我的问题是下一步

  • 有没有机会将NSData转换为NSConcreteData?

  • 我使用正确的方法访问数据吗?


Api文档 - http://gabriel.github.com/yajl-objc/

我的Xcode构建阶段的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:2)

根据YAJL文档,您尝试调用的方法确实存在。

只留下一个选项;你还没有与YAJL框架完全联系起来。

确保它显示在应用目标的链接框架/库列表中,就像我的示例中显示的CFNetwork.framework一样。

enter image description here

由于您尝试调用的方法实际上是NSData类别的一部分,因此请务必在其他链接标记中包含-ObjC < /强>

enter image description here

From Apple's Technical Q&A

  

此标志使链接器加载库中的每个目标文件   定义Objective-C类或类别。虽然这个选项会   通常会导致更大的可执行文件(由于额外的目标代码   加载到应用程序中),它将允许成功创建   包含类别的有效Objective-C静态库   现有的课程。