我的應用程序中有一個顯示UITableView的視圖。該視圖是在一個nib文件中創建的,並具有一個自定義視圖控制器。該視圖的UIViewController子類充當UITableView的數據源和委託。UIViewController -dealloc在關閉模態視圖控制器後調用
我的UITableView根據我的數據顯示了幾行。然後,最後一行顯示不同的文本:「添加另一個...」。如果最後一行被選中,我會提供一個模態視圖控制器(以允許用戶添加更多數據)。當我解散模態視圖控制器時,我再次看到原始視圖(如預期的那樣),並且看起來都很好。但是,當我嘗試與此視圖交互時,應用程序崩潰。
通過放置幾個NSLog()語句通過UIViewController(對於UITableView),我確定在模式視圖關閉之後調用-dealloc方法。這解釋了當我試圖用這種觀點做某事時的崩潰。不過,我不知道爲什麼-dealloc在這個視圖控制器上被調用。
要關閉模態視圖控制器,我有:
[self dismissModalViewController:YES];
如在模態視圖控制器的UIViewController的IBAction爲方法的代碼。此操作綁定到相應的nib文件中的取消按鈕。
另外,我對View Controller Programming Guide的理解是,可以從內部解除模態控制器,但使用代表更加穩健。我最初使用的是一個委託,但委託出去簡化調試。我只是將委託放回來進行仔細檢查,並且在使用委託時會發生相同的行爲。模態控制器的動作方法調用是這樣實現的:
[[self delegate] myModalViewController:self didAddObject:obj];
父視圖控制器的委託實現:
[self dismissModalViewController:YES]
如果有人見過這個或有什麼可能會發生任何建議或如何調試,我將不勝感激。
你的意思是父視圖控制器是被釋放的? – BoltClock 2011-01-12 19:47:35
是的,沒錯。 – jmac 2011-01-12 20:32:59