4

起初我试图访问我的应用程序文件夹中的本地文件:

    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 构建阶段的屏幕截图:

在此处输入图像描述

4

1 回答 1

3

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

那只剩下一个选择;您还没有完全链接到 YAJL 框架。

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

在此处输入图像描述

由于您尝试调用的方法实际上是某个类别的一部分NSData,因此请确保您将其包含-ObjC在您的Other Linker Flags中。

在此处输入图像描述

来自 Apple 的技术问答

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

于 2012-04-28T23:13:13.707 回答