首先,我正在尝试访问我的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构建阶段的屏幕截图:
答案 0 :(得分:2)
根据YAJL文档,您尝试调用的方法确实存在。
只留下一个选项;你还没有与YAJL框架完全联系起来。
确保它显示在应用目标的链接框架/库列表中,就像我的示例中显示的CFNetwork.framework
一样。
由于您尝试调用的方法实际上是NSData
上类别的一部分,因此请务必在其他链接标记中包含-ObjC
< /强>
此标志使链接器加载库中的每个目标文件 定义Objective-C类或类别。虽然这个选项会 通常会导致更大的可执行文件(由于额外的目标代码 加载到应用程序中),它将允许成功创建 包含类别的有效Objective-C静态库 现有的课程。