хм, это то, что я делаю, и играет только один раз:
-(void) playSound: (NSString *) strFileName
{
if(audioPlayer == nil || audioPlayer.playing == NO) //check if it's already playing in case they dbl-tapped (or more) b/c we only want to play it once per found item
{
//Get the filename of the sound file:
NSString *urlAddress = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], strFileName];
//Get a URL for the sound file
NSURL *url = [NSURL fileURLWithPath:urlAddress];
NSError *error;
//Use AVAudioPlayer to play the sound
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = 0;
if (audioPlayer == nil)
NSLog(@"audioPlayer nil Error:%@", [error description]);
else
[audioPlayer play];
}
}
и в шапке:
AVAudioPlayer *audioPlayer;
Вероятно, мне следует также проверить nil перед инициализацией audioPlayer, так что это делается только один раз ... но сейчас - работает.