2011-05-25 27 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的初始化。这样它总是有效的。