iOS学习之旅7 NSBundle的pathForResource:ofType: 返回值为nil问题
Posted Zev_Fung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS学习之旅7 NSBundle的pathForResource:ofType: 返回值为nil问题相关的知识,希望对你有一定的参考价值。
一、问题描述
在处理XML的过程中,在项目中手动创建名为“data.xml”的文件,加入网上找的内容
<?xml version="1.0" encoding="utf-8"?> <Dogs> <Dog id="001"> <name>Ryan</name> <age>26</age> </Dog> <Dog id="002"> <name>Tang</name> <age>27</age> </Dog> <Dog id="003"> <name>Lee</name> <age>24</age> </Dog> </Dogs>
然后xcode加载data.xml中的内容
1 -(void)readXML 2 { 3 //xml文件的路径 4 NSString *dataURL = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"xml"]; 5 //读取xml内容 6 NSData *data = [NSData dataWithContentsOfFile:dataURL]; 7 GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil]; 8 //得到根标签元素Dogs 9 GDataXMLElement *rootElement = [doc rootElement]; 10 //得到根标签元素下的子标签元素Dog 11 NSArray *elementsForDogs = [rootElement elementsForName:@"Dog"]; 12 //遍历 13 for (GDataXMLElement *element in elementsForDogs) { 14 //id节点 15 GDataXMLNode *node = [element attributeForName:@"id"]; 16 //id节点值 17 NSLog(@"Dog的id为%@", [node stringValue]); 18 //元素name 19 GDataXMLElement *elementName = [[element elementsForName:@"name"] firstObject]; 20 NSLog(@"名字为%@", [elementName stringValue]); 21 //元素age 22 GDataXMLElement *elementAge = [[element elementsForName:@"age"] firstObject]; 23 NSLog(@"年龄为%@", [elementAge stringValue]); 24 } 25 }
执行没有任何结果。
二、问题分析
估计原因是elementsForDogs元素个数为0,没有进入for循环。打印elementsForDogs的元素总数,结果真的是0。然后往上查找,发现原来是dataURL值为nil。为什么NSBundle的pathForResource:ofType: 返回值为nil?
找到当前app,右键点击“显示包内容”,发现目录下不存在data.xml文件
三、问题解决
告诉编译器把data.xml拷贝到05_JSON和XML_XML处理.app。
1.选择“项目”-->“TARGETS”下的05_JSON和XML_XML处理。
2.然后点击"Build phases",选择“Copy Bundle Resources”。
3.点击“+”添加data.xml。
4.“Copy Bundle Resources”包含data.xml了。
最后重新运行,结果出来了
以上是关于iOS学习之旅7 NSBundle的pathForResource:ofType: 返回值为nil问题的主要内容,如果未能解决你的问题,请参考以下文章