2011-10-13 56 views
2

我正在與蘋果公司的加速計圖表實施例的工作: http://developer.apple.com/library/ios/#samplecode/AccelerometerGraph/Introduction/Intro.html用於解析後的UIView的iPhone4 EXC_BAD_ACCESS。如何調試?

我推2個圖形視圖到導航控制器:

GraphViewController* graphViewController = [[GraphViewController alloc]initWithNibName:@"GraphViewController" bundle:nil]; 

    [self.navigationController pushViewController:graphViewController animated:YES]; 
    [graphViewController release]; 

圖形的是由外部方法更新:

 [motionManager startDeviceMotionUpdatesToQueue:motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) { 
... 

     if(graphDelegate) 
        { 
         [self performSelectorInBackground:@selector(notifyGraphDelegateWithMotionEvent:) withObject:motion]; 

        } 

} 

,其中調用

[unfiltered addX:filteredValue y:unfilteredvalue z:10]; 

爲每個圖表。更新的頻率是每秒

20次當我從導航控制器流行的觀點,我得到EXC_BAD_ACCESS [超級的dealloc]後

-(void)dealloc 
{ 
    // Since 'text' and 'current' are weak references, we do not release them here. 
    // [super dealloc] will take care to release 'text' as a subview, and releasing 'segments' will release 'current'. 
    [segments release]; 
    [super dealloc]; 
} 

這是一個討厭的錯誤,我真的不知道如何解決這樣的問題。這似乎是關於視圖被分配的順序的事情,因爲在視圖彈出之後發生崩潰。有關如何解決類似問題的任何想法?

+2

你試過NSZombieEnabled爲是在你的環境變量?如果不是先嚐試。 – ARC

+0

Nikita說什麼。你可能會過度釋放一個對象,'NSZombie'被設計用來檢測這個對象。 – bdares

+0

@Alex Stone代碼,你顯示我們看起來很好。修復EXC_BAD_ACCESS很有趣。讓我們知道當您啓用NSZombieEnabled時會發生什麼。如果不工作,你可以發佈你的整個樣本項目(郵政編碼,並在這裏分享鏈接)會有人通過你的代碼 – ARC

回答

1

在調試器中設置NSZombieEnabled,MallocStackLoggingguard malloc。然後,當你的應用程序崩潰,在gdb的控制檯輸入:

(gdb) info malloc-history 0x543216 

替換0x543216與導致崩潰的對象的地址,你會得到一個更加有用的堆棧跟蹤,它應該幫助你查明導致問題的代碼中的確切行。

See this article for more detailed instructions.

+0

謝謝,我會嘗試這下回一些瘋狂的錯誤一樣,會蔓延到我的代碼! –