我的Supporting Files文件夹中有一个mp3文件,我想在我的应用程序中循环播放。我正在使用以下代码尝试此操作:
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz" ofType:@"mp3" inDirectory:@"Supporting Files"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1; //infinite
[player play];
但是,这会返回错误说明:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter'
如何在支持文件中访问我的文件,并按预期播放?所有帮助赞赏。
编辑:解决了!请参阅我的答案,了解我是如何做到的:)答案 0 :(得分:1)
如果Supporting Files
文件夹是支持文件组,则默认情况下会在每个Xcode项目中看到,而不需要inFolder:参数,因为Supporting Files
是Xcode分组而不是真实文件夹。所以你应该这样做:
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz"
ofType:@"mp3"];
这应该有用。
希望它有所帮助。
答案 1 :(得分:0)
可能是你通过的路径将是零,
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz" ofType:@"mp3" inDirectory:@"Supporting Files"];
。
确保已将文件正确添加到捆绑包中。 并且在提交操作之前添加适当的检查,这是最佳实践。如下,希望这可以帮助你..
// Define NSFileManager and add the proper checks for file existance like as follows.
NSFileManager *filemgr = [NSFileManager defaultManager];
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"smoothjazz" ofType:@"mp3" inDirectory:@"Supporting Files"];
if (filemgr fileExistsAtPath:imageURL.absoluteString])
{
// Your code to play the sound file
}
答案 2 :(得分:0)
Dan Spag是对的 - 我不需要使用'inDirectory:',因为它在支持文件中。但主要问题是我在viewDidLoad方法中声明了AVAudioPlayer,这意味着它的生命周期只与方法一样长(或者沿着那些方向)。所以我将变量声明为全局变量,问题解决了!音乐播放。