2011-05-20 170 views
1

我目前正在研究一個嚴重依賴核心數據的應用。 I 使用導航控制器來推動和彈出視圖。當我去 回到堆疊在導航控制器中的程序有時 崩潰和我收到錯誤(通常突出於 managedObjectContext合成或dealloc的):核心數據應用崩潰,「EXC_BAD_ACCESS」&NSZombie

"Thread 1: Program received signal: "EXC_BAD_ACCESS". 

我使用的靜態分析器來固定所有的泄漏它發現。

我使用了NSZombie,好像我的分配上升了,然後在我關閉菜單視圖時不會關閉。然後當我點擊另一個菜單視圖時,我得到兩個結果。

0 Category:NSManagedObjectContext EventType:Malloc RefCt:1 Timestamp:00:04.133.722 Address:0x5da0f10 Size:128 RespLib:pua-app RespCaller:-[pua_appAppDelegate managedObjectContext] 

1 Category:NSManagedObjectContext EventType:Zombie RefCt:-1 Timestamp:00:16.524.983 Address:0x5da0f10 Size:0 RespLib:pua-app RespCaller:-[OpenersroutinesMenuViewController setManagedObjectContext] 

我ZERO這種類型的調試經驗,但顯然被管理對象上下文是「不爽」我的猜測是,我沒有正確創建或因爲它是通過菜單通過管理背景。這一點也很有趣,因爲MOC在這些菜單中沒有被修改,並且在被修改的視圖中不會發生這個錯誤。

+0

一定要爲您的解決方案添加一個答案,以便其他人可以從中學習,也許更重要的是,沒有人會嘗試回答它。 :) – 2011-05-20 21:33:45

回答

1

首先,泄漏永遠不會導致這種崩潰。泄漏是一個低釋放。這些崩潰通常是由過度釋放造成的。

從您的NSZombie輸出中,看起來您的MOC是過度釋放的東西。我會看看你處理managedObjectContext的每個地方,並確保你保留並正確釋放它。第一條規則是使用訪問器而不是直接混淆你的ivars(除了在-init,-dealloc和你的訪問器,它應該使用ivars)。

這種問題的一個可能的原因是多線程。確保你沒有從多個線程訪問同一個MOC。它們不是線程安全的。

該問題可能與視圖或菜單無關。問題很可能是你在MOC上打電話-release,你沒有保留。