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文件

app

三、问题解决

告诉编译器把data.xml拷贝到05_JSON和XML_XML处理.app。

1.选择“项目”-->“TARGETS”下的05_JSON和XML_XML处理。

2.然后点击"Build phases",选择“Copy Bundle Resources”。

3.点击“+”添加data.xml

步骤

 

add

4.“Copy Bundle Resources”包含data.xml了。

addResult

最后重新运行,结果出来了

result

 

以上是关于iOS学习之旅7 NSBundle的pathForResource:ofType: 返回值为nil问题的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发-UI学习-NSBundle和NSHomeDirectory的区别

IOS NSBundle使用(访问文件夹)

我的第二次找工作之旅

ios学习之旅--oc对象的关系

ios学习之旅---指针也不难

ios学习之旅---指针也不难