3 回答

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