URLForResource returns 无

URLForResource returns nil

我正在学习如何使用 xcode 以及如何为 Mac 编写应用程序。

所以,我有一个简单的屏幕保护程序,可以加载一个工作正常的外部文件。我决定最好在应用程序中嵌入 html 源以减少外部依赖性。

我将 HTML 文件拖到资源文件夹中,它位于顶层,没有子文件夹或其他任何东西。

我确保“添加到目标”中有我的应用程序,同时选择了 'create folder references' 和 'copy files if needed'。我使用以下方法将 url 获取到文件,但它 returns nil

    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"embedded" withExtension:@"html"];


 System Preferences[10185]: fileUrl returned (null) 

我已经通读了所有其他类似问题的 SO 问题,但 none 的修复似乎适用。我已经通过并检查了它们。

如果我显示最终版本的包内容,embedded.html 就在那里。我是不是漏掉了一些很明显的东西?

编辑添加

在构建阶段,它列在复制包资源中

xcode 版本为 6.1.1

经过大量挖掘和一点点运气后,我发现

    NSURL *fileUrl = [[NSBundle mainBundle] URLForResource:@"embedded" withExtension:@"html"];

不正确,我应该使用

    NSURL *fileUrl = [[NSBundle bundleForClass:[self class]] URLForResource:@"embedded" withExtension:@"html"];

相反。

NSBundle bundleForClass:[self class] 而不是 NSBundle mainBundle 将提供对屏幕保护程序包的访问权限。

可能很明显,但前提是您知道 ;)

Apple Developer NSBundle Class Reference

我遇到了类似的问题。我的答案是检查对象身份的目标成员资格。

退出并重新启动 Xcode 为我解决了这个问题。

使用这个解决了我的问题[myBundle URLForResource: withExtension: subdirectory: ]

NSBundle URLForResource的子目录查询需要指定子目录。否则它 returns nil.

今天花了一个小时来解决这个问题:'(

我在 MAC 应用程序中遇到了同样的问题。几个小时后,我找到了一个简单的方法来修复它。

1、确保"Build Phases"下有一个名为"Copy Files"的阶段。如果没有,请加一个。

2、将您的资源添加到阶段中。

3、重建你的项目,你可以在~/Library/Developer/Xcode/DerivedData//Build/Products/Debug/.

找到你的资源