首页 > 技术文章 > NSBundle的pathForResource:ofType: 返回值为nil问题

Zev_Fung 2016-06-16 19:20 原文

一、问题描述

在处理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

 

推荐阅读