39

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

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

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

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

我不知道为什么。

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

4

9 回答 9

64

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

我并没有真正注意发布的屏幕截图,但目标是“命令行工具”类型......并且因为那些没有捆绑[NSBundle mainBundle]当然返回零。Xcode 并没有抱怨它不能执行“复制捆绑资源”步骤,这是相当误导的,它只是默默地跳过它。

解决方案只是添加一个新的目标,类型为“应用程序”,因此生成了一个基于捆绑的应用程序。然后选中此新目标的所有源和资源的Target Membership复选框。然后正确解析 plist 路径。

于 2010-10-16T18:31:56.403 回答
53

我试图让我的 iPhone 应用程序使用默认的 sqlite 数据库,但该死的应用程序找不到它。原来我必须确保 .sqlite 文件在捆绑资源中。

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

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

于 2012-09-04T02:43:08.370 回答
22

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

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

第二种方式:在项目浏览器中右键单击(或 Cmd-clock)文件浏览器的标题(它可能会读取“组和文件”)。然后选择“目标会员”。现在,每个可以成为目标成员的文件(如 .m 文件或资源)旁边都有复选框。再次确保选中文件旁边的复选框。

于 2010-10-16T15:05:29.247 回答
5

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

我有 2 个文件:用于 Retina 的托盘.png和托盘@ 2x.png。这些文件被自动添加到“复制捆绑资源”中。

但:

[[NSBundle mainBundle] pathForResource:@"tray" ofType:@"png"];

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

于 2013-03-01T10:44:41.757 回答
2

我的问题和解决方案与 Dmitriy Isaev 的问题和解决方案非常相似。我试图获取 xib 文件的路径。两个调用(在 Swift 中) pathForResource("myfile", ofType: "xib") 和 pathForResource("myfile.xib", ofType: nil) 都失败了。

解决方案是改用扩展名“nib”:

pathForResource("myfile", ofType: "nib")
于 2015-05-10T07:27:47.327 回答
2

我今天在命令行项目中遇到了这个问题。

幸运的是,解决方案很简单。只需转到“构建阶段”,单击“+”并添加一个新的“复制文件”阶段。选择“资源”作为目标,然后添加您要使用的任何文件。

现在您仍然可以使用[NSBundle mainBundle],它应该可以工作!

于 2016-05-16T15:37:17.747 回答
1

在我的情况下(执行 XCTestCase)由于某种原因资源存储在非主包中。我通过首先检查哪个捆绑测试类属于来解决了这个问题:

[[NSBundle bundleForClass:[self class]] pathForResource:@"Config" ofType:@"plist"];

希望这也可以帮助其他人。

于 2019-10-01T08:47:29.263 回答
0

iPad 上的文件名区分大小写。您需要使用小写字母。

于 2011-05-08T13:42:57.577 回答
-1

确保正确拼写资源的文件名。我只是以艰难的方式学到了这一点。:)

于 2011-08-17T11:07:08.140 回答