當在Objective-C中調用選擇器時,應用程序崩潰導致調試堆棧指向選擇器,這是什麼原因?據我所知,這是由於內存錯誤造成的。但是,我發送命令的對象和參數(數組)都是有效的。我可以告訴,因爲這兩個對象顯示內存位置以及在Xcode中被隱藏時的其他信息。調用選擇器時,什麼原因導致「EXC_BAD_ACCESS」?
由於跡線在此選擇器處結束,所以我不知所措。堆棧指向具有有效對象參數的選擇器時,我從來沒有見過這個錯誤。
此外,這個選擇器被頻繁調用。它總是處理相同類型的對象,並且在我崩潰之前沒有任何異常行爲。
這個崩潰很少發生,每10分鐘或更少發生。
因爲我是新手程序員,所以選擇器內的代碼可能有問題。我經常比較的對象指針像這樣:
if (thisObject.pointerToSomeObject == nil) { //do stuff...
我開始懷疑這是正確的Objective-C編程,但話又說回來,代碼工作的大部分時間。有沒有我不知道的一個角落案件?
附加信息: 我使用的是cocos2d版本1.0.0,Xcode 4.1。在iPad模擬器上測試。
任何幫助表示讚賞,即使鏈接到相關的調試文章將有所幫助。
編輯
發展:
默認調試線程指向一個選擇,一個壞的訪問錯誤可能意味着壞訪問的是,選擇的執行中發生的事情。可以打開NSZombies的進一步調試來查找確切的行。
所以,打開NSZombies之後,問題就更加詳細地揭示了。 (感謝@Lou佛朗哥的壞訪問教程)
現在,什麼會導致:
if ([thisZombie target] == nil)
在[thisZombie target]
訪問整數時,以評估NO,而是拋出一個壞的訪問? 該target
是一個指向一個NSObject(zombified)
else {
int diffx = [thisZombie x] - [[thisZombie target] x];
// ^^ ----- bad access here
**編輯2 **
必須有一些錯誤的語法,或短路評價:
if (!thisZombie.target && thisZombie.leader && !thisZombie.leader.dead)
thisZombie.leader。死了停止線用: 「* - [殭屍死]:發送到釋放實例消息0x2108f0」
我想我應該提到的是這遊戲有「植物大戰殭屍」,這是不是與「NSZombie混淆「
因此,該程序評估」thisZombie.target「爲」true「 ,但是當我去訪問」thisZombie.target.x「程序停止執行。
爲什麼?
編輯3
大家好, 我想再次感謝大家的有益的意見和建議。 我決定徹底改變我的殭屍跟隨他們的領導者來解決這個問題。
我仍然不知道什麼會導致如上所述的評估,但答案不再需要。
我遵循你的教程,它幫助了很多。我相信我會用我將來學到的東西。萬分感謝! – ThompsonCodes
@ user890499如果這是最好的答案,並且它對你有幫助,那麼請考慮點擊旁邊的那個小複選標記。這標誌着答案被「接受」,以便未來的用戶知道什麼工作。 – PengOne
它沒有解決它,但它有助於縮小問題和顯着的問題。仍在尋找答案。 – ThompsonCodes