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];
}
你能看到什么问题吗?
显然,“if” - 陈述从未被称为......
答案 0 :(得分:17)
如果我正确阅读了您的代码,您正试图了解播放器何时播放完毕,然后您想要取消选择当前的代码并释放播放器。 您的问题是您启动播放器然后立即检查它当前正在播放的位置。除非你的文件长度接近0,否则currentTime和length永远不会相等。
如果您正在尝试这样做,则应使用AVAudioPlayerDelegate Protocol,尤其是:
– 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
}
答案 1 :(得分:3)
您正在将double
与==
进行比较,由于四舍五入错误,这几乎总是假的。
与范围比较,例如
if (fabs(player.currentTime - lenghtMusic) < 0.0001) {
...
}
答案 2 :(得分:0)
我是一个noob iPhone开发者,但你确定player.currentTime是一个NSTimeInterval吗?这看起来是最明显的候选人。
另外,我会在你的if之前注明你的player.currentTime是什么以及lenghtMusic是什么,那可能会让你知道发生了什么。