2009-06-28 70 views
0

我有一個顯示項目列表的UIViewController實例。當用戶選擇一個項目時,我需要創建一個UIViewController的新實例(由不同的項目列表填充)並顯示它。 在我從didSelectRowAtIndexPath方法方法中調用構造函數在本身內實例化一個UIViewController的新實例

RootViewController *rootViewController = [[RootViewController alloc]initWithStyle:UITableViewStylePlain]; 
UIViewController *targetViewController = rootViewController; 
[[self navigationController] pushViewController:targetViewController animated:NO]; 

但是,而不是創建它重用當前一個新的對象的時刻:新視圖包含新的列表項以及從以前的名單。 那麼如何從本身內部創建一個RootViewController的新實例?

回答

0

您正在創建並呈現一個新的視圖控制器,您的問題在別處。

你在哪裏保留表格的數據?

您的代碼確實創建了一個新實例,但它非常明確地告訴您,在創建之後,您並不是告訴新的視圖控制器顯示什麼內容 - 這意味着您從一些更全局的源獲取數據,將新數據附加到。

+0

該數據是一個xml文件。我調用一個方法來解析xml並填充列表。根據參數的值我加載不同的XML列表。但是舊的留下..嗯...... – Pavel 2009-06-29 00:20:55

0

真的含糊:

1)導入您的第2級的頭文件到這個實現文件。回到第二級有getter/setter。在你的第一級添加另一個方法, - (BOOL)set2ndLevelDataBasedOnXMLSource:(id)在這個方法中的源設置適當的實例變量並進行計算來設置數據。

2)你在didSelectRow代碼應該是這樣的:

if(!rootViewController) { 
RootView *rootViewController = [[RootView alloc] initWithstyel...]; } 

BOOL result = [self set2ndLevelDataBasedOnXMLSource:_Source_]; 

if(result) { 
[[self navigationController] pushViewController:targetViewController animated:NO]; } 

然後,你可以重構它:在

if([self set2ndLevelDataBasedOnXMLSource:_Source_]) { 
[[self navigationController] pushViewController:targetViewController animated:NO]; } 

3) - (BOOL)set2ndLevelDataBasedOnXMLSource:(ID)來源{

我有:

NSUInteger result; 
if(source == true) { 

2ndLevelController.section1data = [source (parse for)...]; 

2ndLevelController.section2data = [source (parse for ...)]; 

... 

result = 1; } 
else { result = 0; } 

return result; 

4)在我的第二級,在viewWillDisappear我設置所有這些實例變量爲零(他們是可變數組)

這就是我做到這一點。