Xcode 无法使用NSURL访问本地资源。奇怪的

Xcode 无法使用NSURL访问本地资源。奇怪的,xcode,nsbundle,Xcode,Nsbundle,我的iOS应用程序想要播放本地音频文件。因此,在xCode中,我在我的项目中添加了一个文件audio.m4a。它位于文件树的顶层,但是 NSURL *audioFileURL = [[NSBundle mainBundle] URLForResource:@"audio" withExtension:@"m4a"]; 返回零。一定有个愚蠢的疏忽。我做错了什么 并检查该文件是否存在于构建阶段->复制捆绑资源中 并检查该文件是否存在于构建阶段->复制捆绑资源-/p>Swift 由于这两

我的iOS应用程序想要播放本地音频文件。因此,在xCode中,我在我的项目中添加了一个文件audio.m4a。它位于文件树的顶层,但是

    NSURL *audioFileURL = [[NSBundle mainBundle] 
URLForResource:@"audio" 
withExtension:@"m4a"];
返回零。一定有个愚蠢的疏忽。我做错了什么

并检查该文件是否存在于构建阶段->复制捆绑资源中

并检查该文件是否存在于构建阶段->复制捆绑资源-/p>Swift 由于这两个答案都不完整,而且解决方案也在评论中传播,所以让我提供一个快速的替代方案。以及一步一步的回应

原始的Objective-C代码是正确的:

NSURL *audioFileURL = [[NSBundle mainBundle] 
    URLForResource:@"audio" 
    withExtension:@"m4a"];
迅捷的

目标成员

这可能是最初向项目添加资源时的疏忽。添加这些文件时,必须选择足够的目标:

无论使用何种语言,请确保您的文件是Project>Build Phases>Copy Bundle Resources。你不需要用手做那件事。相反,请使用文件检查器。在左侧面板上选择您的资源,并在右侧面板上验证其目标成员身份:

敏捷的 由于这两个答案都不完整,而且解决方案也在评论中传播,所以让我提供一个快速的替代方案。以及一步一步的回应

原始的Objective-C代码是正确的:

NSURL *audioFileURL = [[NSBundle mainBundle] 
    URLForResource:@"audio" 
    withExtension:@"m4a"];
迅捷的

目标成员

这可能是最初向项目添加资源时的疏忽。添加这些文件时,必须选择足够的目标:

无论使用何种语言,请确保您的文件是Project>Build Phases>Copy Bundle Resources。你不需要用手做那件事。相反,请使用文件检查器。在左侧面板上选择您的资源,并在右侧面板上验证其目标成员身份:


…并检查该文件是否存在于构建阶段…成功了。我知道这是件愚蠢的事。今天我学到了:如果你向你的项目中添加一个图像,它会自动复制到你的app.bundle中。如果你添加了一个声音文件,不是这样。这个代码是错误的。-pathForResource:…和-URLForResource:…之间的文件行为没有区别…。更重要的是,+URLWithString:是从文件路径创建URL的完全错误的方法…并检查该文件是否存在于构建阶段…成功了。我知道这是件愚蠢的事。今天我学到了:如果你向你的项目中添加一个图像,它会自动复制到你的app.bundle中。如果你添加了一个声音文件,不是这样。这个代码是错误的。-pathForResource:…和-URLForResource:…之间的文件行为没有区别…。更重要的是,+URLWithString:是从文件路径创建URL的完全错误的方法
NSURL *audioFileURL = [[NSBundle mainBundle] 
    URLForResource:@"audio" 
    withExtension:@"m4a"];
let audioFileURL = NSBundle.mainBundle().URLForResource(
    "audio",
    withExtension: "m4a")