簡體   English   中英

UIViewController -dealloc在解除模態視圖控制器后被調用

[英]UIViewController -dealloc Being Called After Dismissing Modal View Controller

我的應用程序中有一個顯示UITableView的視圖。 此視圖在nib文件中創建,並具有自定義視圖控制器。 此視圖的UIViewController子類充當UITableView的數據源和委托。

我的UITableView根據我的數據顯示幾行。 然后,最后一行顯示不同的文本:“添加另一個...”。 如果選擇了最后一行,我會提供一個模態視圖控制器(允許用戶添加更多數據)。 當我關閉模態視圖控制器時,我再次看到原始視圖(如預期的那樣)並且看起來都很好。 但是,當我嘗試與此視圖進行交互時,應用程序崩潰了。

從通過UIViewController(對於UITableView)放置幾個NSLog()語句,我已經確定在模式視圖被解除后正在調用-dealloc方法。 這解釋了當我嘗試使用該視圖執行某些操作時的崩潰。 但是,我不知道為什么在這個視圖控制器上調用-dealloc。

要解雇模態視圖控制器,我有:

[self dismissModalViewController:YES];

作為模態視圖控制器的UIViewController中的IBAction方法中的代碼。 此操作與相應nib文件中的取消按鈕相關聯。

此外,我從View Controller編程指南中了解到,可以從內部解除模態控制器,但使用委托更加健壯。 我最初使用的是委托,但是委托代理來簡化調試。 我只是讓代理重新進行仔細檢查,使用委托時會出現相同的行為。 模態控制器的動作方法調用實現為:

[[self delegate] myModalViewController:self didAddObject:obj];  

父視圖控制器中的委托實現是:

[self dismissModalViewController:YES]

如果有人之前已經看過這個,或者對可能發生的事情有什么建議或如何調試這個,我將不勝感激。

如果正在調用-dealloc ,則會釋放視圖控制器。 嘗試在視圖控制器中實現-release

-(void)release {
    NSLog(@"view controller released");
    [super release];
}

這樣,您可以使用調試器在發生此意外釋放消息時檢查調用堆棧。

從模態視圖控制器本身調用dismissModalViewController危險(消息將被轉發到父視圖控制器),如果你沒有在其他地方保留它。 通常,父視圖控制器負責解除它所呈現的模態視圖控制器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM