2013-02-16 50 views
6

我看到很多的線程在這裏瞭解如何解決EXC_BAD_ACCESS碼= 2,共識似乎是,我試圖訪問我的數組或對象我的陣列已經發布了。我發現大多數情況下,解決方案似乎是在代碼中有太多[釋放對象]。對我來說問題是我沒有任何發佈呼叫,因爲我使用ARC。如何調試EXC_BAD_ACCESS碼= 2,而使用ARC

所以我的問題是我該如何去調試這個自己從這一點。我可以發佈代碼,如果這可以幫助,但我認爲作爲第一步,我只是想幫助我的下一步應該是什麼以及如何去做。

我發現了很多的線程似乎在說,我應該打開NSZombiesEnabled幫助尋找問題的根源。

殭屍啓用之前,我的應用程序將生成並運行絕對沒有錯誤或警告。但只要你在模擬器中觸摸一個按鈕,它就會崩潰。

打開殭屍後,應用程序仍然生成並運行,沒有任何錯誤,但是現在仿真器出現時它立即崩潰,現在XCode切換到胎面1下的調試導航器,列出超過100,000個條目,每一個你點擊顯示主窗口中的一些東西,我不知道是什麼意思。

那麼,現在我該怎麼辦?我已經開啓殭屍,再次運行,我在屏幕上看到一堆東西,但不知道如何製作它的頭部或尾部。我試圖發佈一個屏幕截圖,但我還沒有權限去做。

+0

我們需要一些代碼才能提供幫助。確保在EXC_BAD_ACCESS行中包含代碼。使用ARC,ARC會自動處理很多內存相關的錯誤,因爲它會分配和釋放並確保不會過度使用。話雖如此,取決於代碼邏輯,它可能會發生。所以請張貼代碼。 – Spectravideo328 2013-02-17 02:20:08

+0

添加了一個github帳戶,其中包含所有的項目。現在你可以看到一切。在這裏看到: https://github.com/jonathan3087/Matchismo – jonathan3087 2013-02-17 06:24:05

回答

18

我翻翻了源代碼,發現問題所在。您正試圖在self.game上設置numberOfMatchingCards屬性,而您正處於延遲加載game的中間,從而創建無限循環。您的self.game.numberOfMatchingCards將嘗試加載新遊戲,因爲在調用者被調用時尚未完成實例化遊戲。只要改變

- (IBAction)cardModeChanged:(UISegmentedControl *)sender { 
    switch ([sender selectedSegmentIndex]) { 
     case 0: 
      self.game.numberOfMatchingCards = 2; 
      break; 
     case 1: 
      self.game.numberOfMatchingCards = 3; 
      break; 
     default: 
      self.game.numberOfMatchingCards = 2; 
      break; 
    } 
} 

- (IBAction)cardModeChanged:(UISegmentedControl *)sender { 
    switch ([sender selectedSegmentIndex]) { 
     case 0: 
      _game.numberOfMatchingCards = 2; 
      break; 
     case 1: 
      _game.numberOfMatchingCards = 3; 
      break; 
     default: 
      _game.numberOfMatchingCards = 2; 
      break; 
    } 
} 

我不知道這將解決你的壞訪問的問題,但它是在調試導航器中的許多條目的原因。解決這個問題後,如果您仍然遇到訪問問題,請告訴我。重要的是要記住,即使使用ARC,對象仍然會被釋放(當它們的引用計數降爲零時)。

+0

它確實解決了這個問題,我不再在調試導航器中導致導致許多條目的死循環,就像你說的那樣。我也解決了EXC_BAD_ACCESS問題。所以現在,我得到一個乾淨的構建和現在運行警告沒有錯誤。 謝謝你的時間看着這個,我拉着我的頭髮。 – jonathan3087 2013-02-17 23:05:54

+0

沒問題。很高興一切正常! – enjayem 2013-02-17 23:10:36