2011-11-27 61 views
0

我有一個應用程序,做了一些後臺處理...更新進度條不是他的主線程調用我用的方法:局部變量會導致間歇性崩潰

dispatch_async(dispatch_get_main_queue(),^{ 
      [self updateProgress]; 
        }); 

我得到EXEC_BAD_ACCESS在這條線:

int secs=[nowDate timeIntervalSinceDate:startTransmitDate]; 

繼承人的方法:

-(void)updateProgress 
{ 
    [mainProgressBar setProgress:((float)dataOffset/(float)totalToSend)]; 
    NSDate *nowDate=[NSDate date]; 
    int secs=[nowDate timeIntervalSinceDate:startTransmitDate]; 
    if(secs>0){ 
     float bps=(float)dataOffset/(float)secs*(float)8.0; 
     bps=bps/(float)1024.0; // k 
     bps=bps/(float)1024.0; // M 
     if(bpsLabelText){ 
      speedLabel.text=nil; 
      [bpsLabelText release]; 
      bpsLabelText=nil; 
     } 
     bpsLabelText=[NSString stringWithFormat:@"%0.1fMb/s",bps]; 
     [bpsLabelText retain]; 
     speedLabel.text=bpsLabelText; 
    } 
} 

StartTransmitDate我在課程實施中聲明...並設置在別處:

startTransmitDate=[NSDate date]; 
[startTransmitDate retain]; 

我在這裏錯過了什麼?

+0

順便說一句,不是使用'int'來存儲'secs'變量,而是使用'NSTimeInterval',而不是'double'。 – Abizern

+0

如果你啓用殭屍,你會得到任何錯誤嗎? –

回答

0

startTransmitDate如何初始化?如果它沒有保留在任何地方,你是否用__block初始化它以保留它,直到塊停止使用它?

+0

startTransmitDate是類中的全局,也被保留。 – JeremyLaurenson

+0

當應用程序崩潰時,您是否可以看到startTransmitDate和nowDate是否指向有效值? –

0

你能否遺漏nowDate聲明?

NSDate *nowDate = [NSDate date] 
+0

不 - 對不起 - 我甚至在班上宣佈。因此代碼。我編輯了這個問題。 – JeremyLaurenson

0

這是一個奇怪的想法。嘗試在塊的最頂部聲明​​所有本地實例變量而不是初始值設定項,然後僅在聲明所有實例變量後才初始化它們。如果行爲改變,你可能發現了一個錯誤!