NSBundle pathForResource为NULL

pat*_*ick 38 xcode objective-c nsbundle

我正在使用xcode和objc创建一个简单的应用程序,我需要从文件加载NSDictionary,但我无法使用NSBundle获取该文件的路径:

NSString *l = [[NSBundle mainBundle] pathForResource:@"LoginStatuses" ofType:@"plist"];
NSLog(@"%@", l);
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到了这个:

2010-10-16 10:42:42.42样本[5226:a0f](null)

我不知道为什么.

我创建了一个名为Resources的组,在那里我添加了LogingStatuses.plist: 水库

Dar*_*ust 63

所以这是我获得源代码后解决这个问题的方法:

我没有真正关注发布的屏幕截图,但目标是" 命令行工具 "类型...并且因为那些没有捆绑[NSBundle mainBundle]的课程返回nil.Xcode并没有抱怨它无法执行" 复制捆绑资源 "步骤,只是默默地跳过它,这是非常误导的.

解决方案只是添加" Application " 类型的新目标,以便生成基于bundle的应用程序.然后选中目标成员复选框,以获取此新目标的所有源和资源.然后正确解析plist路径.

  • 命令行工具目标仍然可以使用NSBundle pathForResource链接文件.您需要告诉应用程序在构建时将文件复制到products目录中.进入"Build Phases"选项卡,单击"Add Build Phase",然后选择"Add Copy Files".然后只需拖动您需要的文件即可. (13认同)

小智 52

我试图让我的iPhone应用程序使用默认的sqlite数据库,而darn应用程序找不到它.原来我必须确保.sqlite文件在bundle资源中.

  1. 选择您的项目
  2. 选择目标
  3. 选择"构建阶段"选项卡
  4. 打开标记为"复制捆绑资源"的部分
  5. 将.sqlite文件拖放到此部分.

现在你的应用程序将找到这个默认的sqlite数据库.

  • 我发现Xcode会自动将某些类型的文件添加到Copy Bundle Resources阶段,并将其他文件留下.例如,.html文件(以及.strings,.png等)会自动添加,但.js文件则不会. (2认同)

Dar*_*ust 22

文件是否真的包含在目标中(因此会被复制到包中)?有两种方法可以找出/设置:

第一种方法:右键单击(或Cmd-click)文件,选择"获取信息".然后单击"目标"选项卡,确保检查文件中是否有所需的目标.

第二种方法:在项目浏览器中右键单击(或Cmd-clock)文件浏览器的标题(它可能会显示为"Groups&Files").然后选择"目标会员".现在,每个文件旁边都有一个复选框,可以是目标的成员(如.m文件或​​资源).再次确保选中文件旁边的复选框.

  • @Patrick:关于礼仪的快速说法.人们在网站和邮件列表上自愿花时间来帮助社区和个人.它不会帮助网站的任何未来访问者找到您的问题,因为他们在您公开发布然后离线时遇到了同样的问题.它也被认为是一种"闩上"给个人的不良形式,负担单独帮助你解决问题.通过在社区中保留问题和答案,让社区帮助.这样你就可以获得良好的声誉,并帮助帮助者做同样的事情. (11认同)

Dmi*_*aev 5

由于我在这里搜索过,没有找到答案,但后来我自己发现了,我会把它留在这里......

我为Retina提供了2个文件:tray.pngtray@2x.png.这些文件自动添加到"复制包资源"中.

但:

[[NSBundle mainBundle] pathForResource:@"tray" ofType:@"png"];
Run Code Online (Sandbox Code Playgroud)

没有返回实际复制到捆绑包的文件!原因是:IDE创建了一个TIFF文件tray.tiff(joint tray.pngtray@2x.png),所以... ofType:@"tiff"]帮了!