Вы видите что-то не так в этом коде? - PullRequest
2 голосов
/ 08 февраля 2010
NSString *path = [[NSBundle mainBundle] pathForResource:[arraySub objectAtIndex:indexPathHere.row] ofType:@"mp3"];
NSURL *file = [[NSURL alloc] initFileURLWithPath:path];
AVAudioPlayer *myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil];
self.player = myPlayer;
[player prepareToPlay];
[player setDelegate:self];
[self.player play];

NSTimeInterval lenghtMusic = player.duration;

if (player.currentTime == lenghtMusic) {
 NSLog(@"It worked");
 [tableThing deselectRowAtIndexPath:indexPathHere animated:YES];
 [myPlayer autorelease];
 [file autorelease];
}

Вы видите что-то не так?

По-видимому, выражение "если" никогда не вызывается ...

Ответы [ 3 ]

17 голосов
/ 08 февраля 2010

Если я правильно прочитал ваш код , вы пытаетесь выяснить, когда игрок закончил играть, а затем вы хотите отменить выбор текущей поездки и освободить игрока. Ваша проблема в том, что вы запускаете плеер, а затем сразу же проверяете, где он в данный момент играет. Если у вас нет файла длиной почти 0, то currentTime и length НИКОГДА не будут равны.

Если это то, что вы пытаетесь сделать, вы должны использовать протокол AVAudioPlayerDelegate и особенно:

– audioPlayerDidFinishPlaying:successfully:

метод, который вызывается, когда игрок заканчивается.

Таким образом, вам нужно изменить свой класс, который управляет плеером, отредактировав файл .h для использования протокола AVAudioPlayerDelegate. Очевидно, продолжайте расширять то, что вы были раньше.

@interface YourClass <AVAudioPlayerDelegate>

@end

В вашем файле .m: Затем, когда вы создали и назначили свой экземпляр игрока:

[player setDelegate:self];

В файле .m также добавьте метод

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    // Your success code goes here
}
3 голосов
/ 08 февраля 2010

Вы сравниваете double с ==, что почти всегда ложно из-за ошибок округления.

Сравните с диапазоном, например

if (fabs(player.currentTime - lenghtMusic) < 0.0001) {
  ...
}
0 голосов
/ 08 февраля 2010

Я новичок в iPhone, но вы уверены, что player.currentTime является NSTimeInterval? Это выглядит как наиболее очевидный кандидат.

Кроме того, я бы вышел из системы, что такое ваш player.currentTime и что такое lenghtMusic перед вашим if, и это, вероятно, даст вам знать, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...