爲什麼將以下代碼從Old更改爲New條目解決了以下問題。爲什麼這個不同的「addSubView」代碼導致行爲上的差異
代碼:
我使用一個UINavigationController,有一個「MAINVIEW」的UITableViewController,然後一個2級視圖我推到了:當我使用舊代碼
// OLD Entry - Did not work //[self.window addSubview:navigationController.view]; // NEW Entry - Fixed it self.window.rootViewController = self.navigationController;
問題我們把它稱爲「detailedView」UITableViewController。
瀏覽正常的備份和從主到的詳細信息轉發工作正常
但是當啓動時自動運行到第二視圖(我保存狀態)我得到第二視圖OK,但工具欄按鈕做在這種情況下,不會出現在第二個視圖的底部。當我回到主頁面時(通過UINavigationController標準配置),然後選擇UITableView中的行,再次返回到相同的視圖中,工具欄項目顯示正常。
無法追蹤這個問題,但最終通過試驗和錯誤我注意到在appDelegate(所有地方)的代碼(見上文)中的這種變化似乎解決了這個問題。
任何想法?
編輯:爲了完整這裏是完整的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
abort(); // TODO: Do better job here than abort
}
rootViewController.managedObjectContext = context;
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
編輯2:哦,我有一個NIB文件,並在界面生成器的根視圖控制器/窗口設置 - 所以我想知道如果我在這裏混合了NIB和編程方法,這可能會導致問題?編輯3:還注意到,當我添加「self.window.rootViewController = self.navigationController」行時,以下didFinishLaunchingWithOptions代碼工作。這沒有這條線(這是Coredat書的例子),我得到的問題。
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
rootViewController.managedObjectContext = self.managedObjectContext;
self.window.rootViewController = self.navigationController; // WORKS WHEN I ADD THIS LINE IN FOR SOME REASON???
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
return YES;
如何在重新啓動時導航到第二個視圖控制器? – nielsbot 2011-05-10 22:42:56