Сбои приложения при реализации нескольких AVAudioPlayers под ARC - PullRequest
0 голосов
/ 05 февраля 2012

Я планирую использовать несколько AVAudioPlayers для одновременного воспроизведения разных аудиофайлов. Они запускаются пользовательскими событиями. Я использую ARC в первый раз, и не так много документации о том, как ARC может применяться для настройки AVAudioPlayers (пример кода Apple - pre-ARC, как и большинство учебных пособий, которые я могу найти).

Приложение отлично работает с одним экземпляром AVAudioPlayer, но выдает SIGABRT при добавлении секунды. Я предполагаю, что это как-то связано с преждевременным выпуском экземпляров игрока ARC, но я не уверен, как это предотвратить.

Код выглядит следующим образом:

@interface LocationTracker : UIViewController <AVAudioPlayerDelegate> {

AVAudioPlayer *mainLoopPlayer;
AVAudioPlayer *sea1Player;

}

@property (strong, nonatomic) AVAudioPlayer *mainLoopPlayer;
@property (strong, nonatomic) AVAudioPlayer *sea1Player;

@end

реализация (в viewDidLoad):

NSURL *mainLoopURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"wind" ofType:@"aiff"]];   
self.mainLoopPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:mainLoopURL error:nil];  
mainLoopPlayer.numberOfLoops = -1;
mainLoopPlayer.delegate = self;
[mainLoopPlayer prepareToPlay];

NSURL *sea1URL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"sea1" ofType:@"aiff"]];   
self.sea1Player = [[AVAudioPlayer alloc] initWithContentsOfURL:sea1URL error:nil];  
sea1Player.numberOfLoops = -1;
sea1Player.delegate = self;
[mainLoopPlayer prepareToPlay];

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 05 февраля 2012

Хорошо, обнаружена проблема, и дело не в управлении памятью, а в использовании ссылки на папку для ссылки на аудиофайлы.

Ранее я использовал папки с ссылками для хранения изображений без каких-либо проблем, но, по-видимому, это не требуется при работе с несколькими аудиофайлами.

...