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 将提供对屏幕保护程序包的访问权限。
可能很明显,但前提是您知道 ;)
我遇到了类似的问题。我的答案是检查对象身份的目标成员资格。
退出并重新启动 Xcode 为我解决了这个问题。
使用这个解决了我的问题[myBundle URLForResource: withExtension: subdirectory: ]
NSBundle URLForResource的子目录查询需要指定子目录。否则它 returns nil.
今天花了一个小时来解决这个问题:'(
我在 MAC 应用程序中遇到了同样的问题。几个小时后,我找到了一个简单的方法来修复它。
1、确保"Build Phases"下有一个名为"Copy Files"的阶段。如果没有,请加一个。
2、将您的资源添加到阶段中。
3、重建你的项目,你可以在~/Library/Developer/Xcode/DerivedData//Build/Products/Debug/.
找到你的资源
我正在学习如何使用 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 将提供对屏幕保护程序包的访问权限。
可能很明显,但前提是您知道 ;)
我遇到了类似的问题。我的答案是检查对象身份的目标成员资格。
退出并重新启动 Xcode 为我解决了这个问题。
使用这个解决了我的问题[myBundle URLForResource: withExtension: subdirectory: ]
NSBundle URLForResource的子目录查询需要指定子目录。否则它 returns nil.
今天花了一个小时来解决这个问题:'(
我在 MAC 应用程序中遇到了同样的问题。几个小时后,我找到了一个简单的方法来修复它。
1、确保"Build Phases"下有一个名为"Copy Files"的阶段。如果没有,请加一个。
2、将您的资源添加到阶段中。
3、重建你的项目,你可以在~/Library/Developer/Xcode/DerivedData//Build/Products/Debug/.
找到你的资源