Как играть в AVAudioPlayer локально для метода в ios5? - PullRequest
2 голосов
/ 18 октября 2011

Я думаю, что это связано с ARC в iOS 5, но когда я объявляю AVAudioPlayer в методе и запускаю его, он не воспроизводится.Я думаю, что он будет выпущен автоматически в конце метода, потому что я не помню, чтобы это происходило до iOS5.Если я сделаю это глобальной переменной, она будет работать нормально.Любой способ использовать локальный экземпляр?

1 Ответ

2 голосов
/ 19 октября 2011

Сделайте его сохраненным свойством, и сделайте ваш класс делегатом, чтобы вы могли убирать, когда игра закончится.В вашем заголовке:

@interface MyClass : NSObject <AVAudioPlayerDelegate>
@property(strong)AVAudioPlayer *player;

Затем, когда вы используете его:

self.player = [AVAudioPlayer alloc] initWithContentsOfURL:URL error:&err];
[player setDelegate:self];

и очистите его методом делегата:

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)playedSuccessfully {
    self.player = nil;
}

Одна приятная вещьо том, чтобы иметь его как свойство, вы можете прервать его, если вам нужно:

-(void)someInterruptionOccurred {
    [self.player stop];
}
...