2008-12-09 104 views
0

我正在使用UINavigationController來推送和彈出一個視圖。點擊導航欄「後退」按鈕時的哪種方法?

我用[[self navigationController] pushViewController:myView animated:YES]推入視圖。然後我點擊左上角的後退按鈕回去,我得到錯誤:

*** -[NSCFDictionary superview]: unrecognized selector sent to instance 0x1451a0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFDictionary superview]: unrecognized selector sent to instance 0x1451a0' 

我想知道,當返回按鈕被稱爲-popViewController是調用哪個方法。 這個錯誤是發生在第一個視圖還是第二個視圖被推入。

謝謝。

回答

3

後退按鈕應該被稱爲-popViewControllerAnimated :.但是,這聽起來像你在這裏有一個類過度釋放的bug。基本上,你已經看到了一個被分配了一些東西的視圖。這個視圖只是內存中的一個地址。在某個時候,你將這個視圖一直釋放到retainCount爲0.發生這種情況時,視圖被解除分配。在此之後的某個時刻,正在創建一個NSDictionary ,其中的內存地址爲,與之前的解析分配視圖相同。現在有東西想要發送消息給你的視圖,但它不再存在,相反,這裏有一個NSDictionary。它說的是:[查看超級視圖],但查看現在指向一個dictiinary,它不響應superview。底線:檢查您的保留/釋放/ autorelease調用,並確保您沒有過度釋放您的某個視圖(或視圖控制器,儘管這不太可能)。

+0

按本的建議,我重新檢查了代碼,看起來我有一個本地UIButton,它是在該方法中創建和發佈的。在將該局部變量UIButton更改爲實例變量並僅在dealloc中釋放後,問題似乎消失了。 謝謝本 – BlueDolphin 2011-02-03 20:16:16