2011-05-25 28 views
0

哎 我的代碼,因爲這個問題的崩潰:timeIntervalSinceDate內的,如果statment

if ([recorder peakPowerForChannel:0]==0) 
{  
    NSLog(@"we are recording now because signal is at high volume... "); 
    if(flag==1) 
    { 
     start = [NSDate date];  
    } 
    [recorder stop];    
} 
else 
{ 
    [recorder stop];  
    stop = [NSDate date]; 
    duration = [start timeIntervalSinceDate:stop]; 

停止和啓動是的NSDate並在.M 開始宣佈,該問題是因爲「時間」和「開始」不在同一個「如果」,並且將「開始」移動到「其他」下解決它。但我需要它在那裏。

爲什麼會發生這種情況?該軟件在開始之前肯定會「開始」,所以他會忘記開始?

回答

2

[NSDate date]給調用者一個autoreleased對象。 更改start = [NSDate date];start = [[NSDate date] retain];,你應該沒問題。

然後你必須在最後平衡保留計數。

+0

+1這就是應用崩潰的原因。@ Rant看到你的控制檯有一個badAccess日誌。 – Ishu 2011-05-25 12:50:27

+0

非常感謝!偉大的工程..你的意思是平衡保留?釋放它在delloc? – Curnelious 2011-05-25 12:59:42

+0

另一件事,我得到這樣的數字1006632960或-67108864那是什麼? nslog時間是如此不同...... – Curnelious 2011-05-25 13:43:43

0

在if語句之前移動start的初始化。這樣它總是有效的。