使用 [mainBundle pathForResource] 的相同代码行在一个项目中失败,但在另一个项目中有效

Posted

技术标签:

【中文标题】使用 [mainBundle pathForResource] 的相同代码行在一个项目中失败,但在另一个项目中有效【英文标题】:Identical line of code using [mainBundle pathForResource] fails in one project but works in another 【发布时间】:2011-11-22 02:55:55 【问题描述】:

在我的代码中我想打开一个html文件,所以添加了以下代码行:

NSString* path = [[NSBundle mainBundle] pathForResource:@"cheese" ofType:@"html"];

但由于路径在执行后为零而失败。文件 cheese.html 存在并已添加到项目的资源中。

我不能,而且仍然无法弄清楚为什么它不起作用。我还有一些其他项目可以打开和读取文件,因此作为实验,我将失败的代码行复制到了这些其他项目之一,并随之从项目中拖放了 cheese.html 文件。 '不适用于其他项目(从 xcode 的分层项目文件视图中拖放)和宾果游戏 - 该行执行并且路径在其他项目中不为零。

所以我完全迷惑了,为什么它在一个项目中起作用而在另一个项目中不起作用?

两者的代码行完全相同,并且当文件被拖放时,它是同一个文件,并且当文件是从 xcode 本身中拖动时,它证明文件已添加到项目资源中。那为什么还会失败呢?

【问题讨论】:

几个小时后我放弃了,放弃了这个项目,选择了一个可行的项目,并删除了所有不相关的部分。不知道为什么它从来没有奏效。 您是否检查过以使文件在物理上位于正确的位置,包括而不是位于另一个子文件夹等中。 【参考方案1】:

检查一下:

在左侧的管理器中选择您的项目。然后在下一个导航器中选择您的目标名称。然后选择构建阶段“选项卡”。您将看到“复制捆绑资源”部分。确保您要查找的资源在此处列出。如果没有添加它。

【讨论】:

【参考方案2】:

对于遇到此问题的任何人来说,另一种可能的解决方案:有时文件可能属于 不是 mainBundle 的包 - 在这种情况下,最简单的解决方案是使用 @987654322 @ 相反,使用当前类正在使用的包。

【讨论】:

以上是关于使用 [mainBundle pathForResource] 的相同代码行在一个项目中失败,但在另一个项目中有效的主要内容,如果未能解决你的问题,请参考以下文章

无法从 mainBundle 播放 MP4 视频文件

控制 mainBundle 资源路径 iOS 开发

使用来自 [[NSBundle mainBundle] resourcePath] 的路径

cocoapods:资源不会复制到 mainBundle

NSBundle mainBundle 返回 nil

.json 文件不包含在 mainBundle 中?