尝试创建不属于用户iphone库的音乐文件的播放列表,因此我正在使用AVAudioPlayer
并自行创建播放列表功能。它适用于第一遍(意味着播放第一首歌)。当第一首歌完成后,它会在AVAudioPlayer
中播放第二次prepareToPlay
次崩溃。
- (void) create {
Song *song;
NSArray *parts;
NSString *path;
NSString *name;
NSError *err;
if (currentIndex > [queue count])
currentIndex = 0;
if (currentIndex < 0)
currentIndex = ([queue count] - 1);
song = (Song *) [queue objectAtIndex:currentIndex];
name = song.fileName;
parts = [name componentsSeparatedByString:@"."];
path = [[NSBundle mainBundle] pathForResource:[parts objectAtIndex:0] ofType:[parts objectAtIndex:1]];
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &err];
[[AVAudioSession sharedInstance] setActive: YES error: &err];
appPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: url error: &err];
[url release];
[parts release];
[appPlayer prepareToPlay];
[appPlayer setVolume: 1.0];
[appPlayer setDelegate: self];
}
- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL) flag {
[appPlayer stop];
[appPlayer release];
appPlayer = nil;
[self next];
}
对[self next]
的调用只会增加currentIndex
并再次调用create。
唯一的另一件事(我知道,臭名昭着的“唯一的其他事情”声明)就是这一切都在单身人士身上发生。有很多东西可能导致音乐开始和停止播放,更改队列等等,所以我认为最好把它全部包装在一个地方。
有什么想法吗?
答案 0 :(得分:1)
我能够自己跟踪这个。我重写了整个部分以获得多个AVAudioPlayer对象,但仍有问题。事实证明[部件发布]线是问题,它导致自动释放程序中的过度释放情况。
答案 1 :(得分:1)
在prepareToPlay
方法中出现异常的原因之一是“All Exceptions”断点。转到Breakpoint Navigator并禁用它。