【问题标题】:Can't parse json Data via YAJLiOS无法通过 YAJLiOS 解析 json 数据
【发布时间】:2012-04-28 21:08:54
【问题描述】:

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

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

【问题讨论】:

  • 我认为我的主要问题是我使用错误的方法访问数据
  • 你记得在课堂上#import 吗?
  • 另外,关于 NSConcreteData,请在此处查看此问题的答案:stackoverflow.com/questions/1113811/…
  • 是的,YAJLiOS/YAJL.h 已导入
  • @jonkroll 导入如何防止运行时错误?

标签: iphone objective-c ios xcode yajl


【解决方案1】:

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

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

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

由于您尝试调用的方法实际上是NSData 上的类别 的一部分,因此请确保在您的其他链接器标志 中包含-ObjC

From Apple's Technical Q&A.

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

【讨论】:

  • 我已链接 - s13.postimage.org/xwxtjiqh3/…(我的 Xcode 构建阶段的屏幕截图)
  • 谢谢!这行得通。一开始我以为它只能在模拟器上运行,但它也可以在真机上运行!
  • 链接器标志很棘手,并且在使用包含类别的自定义/第三方库时是一个常见的陷阱。去过那里,得到了 T 恤:D..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
相关资源
最近更新 更多