2011-09-29 58 views
0

我有一個顯示地圖的視圖。我有一個UIViewController(DetailViewController)的自定義子類,當按鈕上方的標註的detailDisclosureButton被按下時,它會顯示出來。雖然在我的地圖類,創建我的DetailView並將其添加到像這樣子視圖:內存管理,爲UIViewController的子類添加子視圖

DetailViewController *detailView = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil]; 
    detailView.locationPoint = locationPoint; 
    detailView.locationCoordinate = locationCoordinate; 
    [self.view addSubview:detailView.view]; 
    [detailView release]; 

我DetailViewController有一個TableView中和DetailViewController分析數據。但是,我得到一個錯誤發送numberOfSectionsInTable消息到一個dealloc'd實例。我假設它是這樣的,因爲我原本是作爲一個屬性,它與(非原子,保留)很好地工作。我假設我在下一個視圖完成之前釋放它。如果是這樣的話,我何時會清理內存?這似乎是這樣做的地方。謝謝。

回答

0

我不確定是什麼讓你在這個mapviewcontroller的視圖中添加了DetailViewController的視圖。難道你認爲正確的方法是presentModalViewController或pushNavigationController嗎?

DetailViewController *detailView = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil]; 
    detailView.locationPoint = locationPoint; 
    detailView.locationCoordinate = locationCoordinate; 
    //[self.view addSubview:detailView.view]; 
[self.navigationController pushViewController:detailView animated:YES]; 
//OR 
[self presentModalViewController:detailView animated:YES]; 
    [detailView release]; 

由於你只使用視圖,並立即因此重新分配視圖控制器的tableview數據源和代表均創下nil對象得到錯誤。

+0

我之所以加入它作爲一個子視圖是因爲在未來的DetailView,我在左上角其中[self.view removeFromSuperview]被稱爲以有地圖,引腳位置,標註等完整的一個返回按鈕。否則,我會看到一個純白色的屏幕。我猜我應該使用dismissModalViewController? – Crystal

+0

是的,你想要關閉模式視圖控制器,你的上一個屏幕將保持不變。 –

0

視圖不保留其視圖控制器。有人需要保留VC,否則它會被釋放,然後當視圖調用其委託時,應用程序將崩潰。當你使用導航控制器時,navcon有一堆它保留的視圖控制器。同樣使用presentModalViewController,操作系統負責保留細節VC。

將詳細信息視圖添加爲子視圖不是導航到新視圖的常用方法。相反,您可以使用導航控制器和[navcon pushViewController::]或模態子視圖和[self presentModalViewController::]。如果詳細視圖只佔用父視圖的一部分,則保留父控制器內的子視圖的視圖控制器是正常的。也就是說,在父VC(你的地圖類)內爲細節VC添加一個屬性。實際上,在子視圖中甚至不使用VC更常見,而是用於屏幕填充細節視圖。

相關問題