Я считаю, что проблема в том, что вы создаете новый экземпляр NSSound каждый раз, когда вызываете этот метод. Так что старый экземпляр NSSound может играть, а этот нет. Это, вероятно, приводит к утечке памяти, поскольку вы выделяете новый экземпляр, но никогда не освобождаете старый.
Чтобы преодолеть эту проблему, вы можете добавить в свой класс NSSound * currentSong, а затем использовать этот объект NSSound, когда хотите проверить, воспроизводится ли он. Затем, когда вы переключаете трек, вы можете остановить существующий объект NSSound и освободить его перед созданием нового экземпляра NSSound.
Итак, ваш код должен выглядеть примерно так:
- (IBAction)actionPlayTrack:(id)sender {
if (!currentSong) {
currentSong = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"03 Bazel" ofType:@"mp3"] byReference:YES];
}
if ([currentSong isPlaying]){
[currentSong stop];
[currentSong release];
currentSong = nil;
} else {
[currentSong play];
}
}
- (void)dealloc {
[currentSong release];
currentSong = nil;
}
Затем добавьте NSSound* currentSong
в заголовок.