我的iOS应用想要播放本地音频文件。所以,在xCode中,我为我的项目添加了一个文件“audio.m4a”。它位于文件树的顶层,但
NSURL *audioFileURL = [[NSBundle mainBundle]
URLForResource:@"audio"
withExtension:@"m4a"];
返回nil
。必须有一个愚蠢的疏忽。 我做错了什么?
答案 0 :(得分:4)
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *myFile = [mainBundle pathForResource: @"audio" ofType: @"m4a"];
NSURL *audioFileURL = [NSURL URLWithString:myFile];
并检查该文件是否出现在Build Phases" -> "copy bundle Resources"
答案 1 :(得分:1)
既然答案都没有完成,并且在评论中传播了解决方案,那么让我提供一个 Swift 替代方案。和逐步的回应。
原始的 Objective-C 代码是正确的:
NSURL *audioFileURL = [[NSBundle mainBundle]
URLForResource:@"audio"
withExtension:@"m4a"];
<强>夫特强>
let audioFileURL = NSBundle.mainBundle().URLForResource(
"audio",
withExtension: "m4a")
目标会员资格
这可能是最初将资源添加到项目时的疏忽。添加这些文件时,您必须选择适当的目标:
无论使用何种语言,请确保您的文件是 Project&gt;构建阶段&gt;复制捆绑资源。你不需要手工完成。而是使用文件检查器。选择您的资源(在左侧面板上)并验证它的目标成员资格(在右侧面板上):
答案 2 :(得分:0)
/* Use this code to play an audio file */
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"m4a"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1; //Infinite
[player play];