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中的内容
-(void)readXML
{
//xml文件的路径
NSString *dataURL = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"xml"];
//读取xml内容
NSData *data = [NSData dataWithContentsOfFile:dataURL];
GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:data options: error:nil];
//得到根标签元素Dogs
GDataXMLElement *rootElement = [doc rootElement];
//得到根标签元素下的子标签元素Dog
NSArray *elementsForDogs = [rootElement elementsForName:@"Dog"];
//遍历
for (GDataXMLElement *element in elementsForDogs) {
//id节点
GDataXMLNode *node = [element attributeForName:@"id"];
//id节点值
NSLog(@"Dog的id为%@", [node stringValue]);
//元素name
GDataXMLElement *elementName = [[element elementsForName:@"name"] firstObject];
NSLog(@"名字为%@", [elementName stringValue]);
//元素age
GDataXMLElement *elementAge = [[element elementsForName:@"age"] firstObject];
NSLog(@"年龄为%@", [elementAge stringValue]);
}
}
执行没有任何结果。

二、问题分析
估计原因是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了。

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

NSBundle的pathForResource:ofType: 返回值为nil问题的更多相关文章
- iOS [[NSBundle mainBundle] pathForResource:@"" ofType:@""]无法获取到文件
将一个文件导入到工程中后,用[[NSBundle mainBundle] pathForResource:@"" ofType:@""]来获取到该文件时,一直无 ...
- [[NSBundle mainBundle] pathForResource:fileName ofType:]获取文件路径不成功
目标文件明明已经加入项目了,但是使用[[NSBundle mainBundle] pathForResource:fileName ofType:]来获取文件路径的时候却为nil: 遇到这个问题大家需 ...
- [[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"] 找不到对应的文件解决方法
最近在使用[[NSBundle mainBundle] pathForResource:@"name" ofType:@"type"]时,找不到其对应的文件,文 ...
- Autorelease返回值的快速释放机制
+ (instancetype)createSark { return [self new];}// callerSark *sark = [Sark createSark]; 编译器改写成了形如下面 ...
- 【Go入门教程3】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)
这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ...
- GetLastError()函数返回值及含义
GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置.函数并无必要设置上一次错误信息,所以即使一次GetLastError调用返回的是零值, ...
- IOS开发中返回值为null时的处理
在IOS开发中,如果得到了null返回值很容易造成程序崩溃,null和nil的判断方法不同. nil的判断方法: if(data==nil) { NSLog(@"data is n ...
- [转]WinExec、ShellExecute和CreateProcess及返回值判断方式
[转]WinExec.ShellExecute和CreateProcess及返回值判断方式 http://www.cnblogs.com/ziwuge/archive/2012/03/12/23924 ...
- Delphi检查GetElementByID返回值的有效性
Delphi 可以像JavaScript 脚本语言一样使用GetElementByID方法访问网页中指定ID的元素,一般要配合TWebBrowser组件使用.首先使用TWebBrowser浏览网页,然 ...
随机推荐
- Back to Edit Distance(LCS + LIS)
Given 2 permutations of integers from 1 to N, you need to find the minimum number of operations nece ...
- button事件驱动
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 在同一个页面使用多个不同的jQuery版本,让它们并存而不冲突
- jQuery自诞生以来,版本越来越多,而且jQuery官网的新版本还在不断的更新和发布中,现已经达到了1.6.4版本,但是我们在以前的项目中就已经使用了旧版本的jQuery,比如已经出现的:1.3 ...
- Bootstarp: sub_menu 自定义改变nav样式
<style> .nav > li > a { position: relative; display: block; padding: 5px 5px; } </sty ...
- http://debugjs.com/
浏览器内调试js代码,这篇文章介绍了作者的开发心路 http://amasad.me/2014/01/06/building-an-in-browser-javascript-vm-and-debug ...
- Linus爱GPL 但不喜欢GPL诉讼
导读 在上周多伦多举行的LinuxCon NA会议上,Linus Torvalds 和 VMware 副总裁 Dirk Hohndel讨论了 GNU GPL 在 Linux 成功上所起的作用.Hohn ...
- Unity手游之路<一>C#版本Protobuf
http://blog.csdn.net/janeky/article/details/17104877 个游戏包含了各种数据,包括本地数据和与服务端通信的数据.今天我们来谈谈如何存储数据,以及客户端 ...
- UIView的layoutSubviews和drawRect
原文: UIView的layoutSubviews和drawRect UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.setNeedsDis ...
- Unable to add window -- token null is not for an application
导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApp ...
- 数据流图DFD画法
数据流图(DFD- Data Flow Diagram)让系统分析者弄清楚"做什么"的问题,其重要性就不言而喻了.那么我们怎么画数据流图呢?数据流图与系统流程图又有什么区别呢? 步 ...