我有一個tabBarController與兩個選項卡,其中第一個包含NavigatorController的實例。 navigatorController由一個自定義viewController「peersViewController」啓動,該列表列出了tableView上的所有網絡對等點。選擇對等體後,將「FilesListViewController」(列出c:\目錄中的文件)實例推送到navigationController堆棧中。UINavigationController popToRootViewController,然後立即推新視圖
在這個filesListViewController我有一個按鈕,讓它導航到說文檔目錄。要做到這一點,我想有線接口調用gotoDirectory:(的NSString *)在RootViewController的路徑方法:
- (void)gotoDirectory:(NSString*)path {
[[self navigationController] popToRootViewControllerAnimated:YES];
NSArray *files = [self getFilesFromPeerAtPath:path];
FilesListViewController *filesVC = [[FilesListViewController alloc] initWithFiles:files];
[[self navigationController] pushViewController:filesVC animated:YES];
[filesVC release];
}
然而,當我按下該按鈕時,navigationController並彈出我認爲到根視圖控制器,但是然後我實例化的FilesListViewController沒有出現。從日誌中,我知道自定義的initWithFiles方法確實被調用,並且網絡資料確實發生了獲取文件名。
其他的東西對此很詭異。我嘗試點擊第二個標籤,然後點擊回到第一個標籤,然後點擊huala!我需要的文件名在那裏。它看起來像數據和filesListViewController確實被推入navigatorController堆棧,但顯示不刷新,但卡在rootViewController(peersViewController)的屏幕上。
我做錯了什麼?
- 本。
- 發佈問題後15分鐘編輯。我找到了一個解決方法,但它困擾我流行,然後推動不起作用。
- (void)gotoDirectory:(NSString*)path {
PeersListViewController *rootViewController = (PeersListViewController*)[[[self navigationController] viewControllers] objectAtIndex:0];
[[self navigationController] setViewControllers:[NSArray arrayWithObject:rootViewController]];
FilesListViewController *filesVC = [[FilesListViewController alloc] initWithFiles:files];
[[self navigationController] pushViewController:filesVC animated:YES];
[filesVC release];
}
它似乎並不像navigationController應該規避這種方式,我可能不得不釋放所有在原始堆棧中的viewControllers。然而,這在iPhone 3.0模擬器上工作。
如果我使用這段代碼,應該如何處理內存釋放?我應該得到視圖控制器的原始NSArray並釋放一切嗎?
是的,你需要彈出沒有動畫(以便它馬上發生),然後推動動畫。如果您試圖一起做兩個動畫更改(需要時間才能完成),則視圖將處於不良狀態。 – Jason 2009-11-18 19:09:01
完全如上所述,這對我不起作用。 我認爲這是堆棧更改的時間問題(Apple的動畫代碼非常脆弱,實施效果不佳) - 這種技術可能會也可能不會工作,取決於屏幕上的其他內容。 – Adam 2009-11-22 22:02:26