3 回答

TA貢獻1851條經驗 獲得超4個贊
有類似的問題。在我的情況下,viewController需要獲取navigationController事件,因此它正在注冊為導航控制器委托:
self.navigationController.delegate = self;
當該控制器被取消分配但仍然是視圖控制器的委托時,發生崩潰。在dealloc中添加以下代碼無效:
-(void) dealloc
{
if (self.navigationController.delegate == self)
{
self.navigationController.delegate = nil;
}
因為在調用dealloc的那一刻,視圖控制器已經從視圖層次結構中刪除,所以self.navigationController為nil,所以比較肯定會失?。?-(
解決方案是添加此代碼以檢測VC是否在實際離開視圖層次結構之前就離開了視圖層次結構。它使用iOS 5中引入的方法來確定何時彈出視圖而不將其推入
-(void) viewWillDisappear:(BOOL) animated
{
[super viewWillDisappear:animated];
if ([self isMovingFromParentViewController])
{
if (self.navigationController.delegate == self)
{
self.navigationController.delegate = nil;
}
}
}
- 3 回答
- 0 關注
- 498 瀏覽
添加回答
舉報