2012-08-28 38 views
1

當我的應用程序進入背景時,我停用了我應用程序中的所有計時器。其實它只是一個計時器。我這樣做的方式如下:使用nstimer的奇怪分段錯誤錯誤

- (void) invalidate_timer { 
    if(self.timer != nil) { 
     [self.timer invalidate]; 
     self.timer = nil; <-- App crashes on this line 
    } 
} 

但是,應用程序有時(並不總是)在下面的行崩潰。我完全糊塗......這可能怎麼樣?

的錯誤是:線程1:EXC_BAD_ACCESS(碼= 1,0xeblablabla;))

編輯:

- (void) invalidate_timer { 
    if(self.timer != nil) { 
     [self.timer invalidate]; 
     //self.timer = nil; <-- doing this, and the app no longer crashes 
    } 
} 

如何瘋狂的是這個???

編輯2: 這是堆棧跟蹤的頂部部分:

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0: 
0 libsystem_kernel.dylib   0x31985848 __kill + 8 
1 BlackLane2      0x0015f85e fatal_signal_handler (PLCrashSignalHandler.m:103) 
2 libsystem_c.dylib    0x3408d7e6 _sigtramp + 42 
3 BlackLane2      0x0013b586 -[FutureTourDetailsVC invalidate_timer] (FutureTourDetailsVC.m:159) 
+0

像定時器的聲音被釋放,你正在操作垃圾或不同的對象。也許你計劃重複:不,計時器已經自動失效? – Jano

回答

0

請閱讀NSTimer class reference有關invalidate方法。將計時器設置爲零是錯誤的,運行循環會關注發佈。