2010-02-08 65 views
2
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]; 
} 

你能看到什麼不對嗎?你能在這段代碼中看到什麼錯誤嗎?

顯然,「如果」語句來從未被調用...

+2

是的,這是拼成長度。 :p – kennytm 2010-02-08 16:26:34

+1

你的意思是你期望它是真實的,你永遠不會看到你的NSLog調用或條件從未被評估? – willcodejavaforfood 2010-02-08 16:27:02

+0

您是否嘗試過調試?如果你不想/ debug /你總是可以添加一條日誌語句:NSLog(@「%d%d」,player.currentTime,lenghtMusic); //順便說一下......在你做完之後,你應該能夠看到這些值是什麼以及它們爲什麼不相等。 – Malaxeur 2010-02-08 16:27:28

回答

17

如果我正確地讀取了您的代碼您正試圖瞭解播放器何時完成播放,然後您想取消選擇當前播放並釋放播放器。 您的問題是您啓動播放器,然後立即檢查它正在播放的位置。除非你的文件長度接近0,否則當前時間和長度永遠不會相等。

如果這是你正在嘗試做的,你應該使用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 
} 
+0

你可以調用另一個函數內? – Emil 2010-02-08 17:12:46

+0

這讓我的投票正確的答案。這是一個應始終執行的委託方法。如果不使用任何一種NSData方法,幾乎​​不可能比較NSTimeIntervals。它只需要很高的精度。 – TechZen 2010-02-08 18:08:25

+0

''[player isplaying]' 這告訴我,它的運行。你如何知道它是否完成了? – Emil 2010-02-08 18:24:04

3

您與==,這幾乎總是錯誤的,由於舍入誤差比較double的。

與範圍比較

if (fabs(player.currentTime - lenghtMusic) < 0.0001) { 
    ... 
} 
+0

我會試試! 謝謝:) – Emil 2010-02-08 16:32:20

+0

沒有工作... 有任何其他的想法? – Emil 2010-02-08 16:34:08

+0

試試這個:'if(player.currentTime> = lengthMusic){'(或者,如果這不起作用,'if(player.currentTime> = lengthMusic - 0.001){') – 2010-02-08 17:05:32

0

我是noob iPhone dev,但你確定player.currentTime是NSTimeInterval嗎?這看起來是最明顯的候選人。

此外,我會註銷你的player.currentTime是什麼和lenghtMusic在你之前是什麼,這可能會讓你知道發生了什麼。

+0

currentTime是一個NSTimeInterval – willcodejavaforfood 2010-02-08 19:31:26

相關問題