我的應用使用UINavigationController來顯示不同的UITableViewControllers。但是有一個非常奇怪的行爲:只有在pushViewController:animated:
中的動畫設置爲NO時,才能將UITableViewController推送到導航控制器。UINavigationController彈出/推送UITableViewController僅適用於動畫:NO
[navController pushViewController:tableController animated:NO]
設置已動畫化以YES只是表示tableController視圖之前凍結該應用。目前沒有例外或錯誤。最後該應用程序在投擲幾分鐘後崩潰EXC_??? (11) (code=0, subcode=0x0)
。但是,這是什麼意思?
一些詳細信息:
所有控制器和視圖程序加載。第一:
UITableViewController *tableController1 = [[UITableViewController alloc] init];
navController = [[UINavigationController alloc] initWithRootViewController:tableController1]
[self.view addSubview:navController.view];
點擊一個按鈕tableController2使用設置後:
UITableViewController *tableController2 = [[UITableViewController alloc] init];
[navController pushViewController:tableController2 animated:NO];
// -> NO works, YES freezes
分析tableController2,我還創建了一個自己的tableViewController。結果是:單擊按鈕加載第二個表視圖控制器後,將調用所有方法,最大爲viewWillAppear
。未調用viewDidAppear
,並且未顯示視圖。
有沒有人有一個想法如何找到解決這個問題的解決方案?或者有什麼想法,我的代碼中可能缺少什麼?註釋掉多個小時一串代碼和調試沒有幫助尚未...
編輯:
正如評論所說,這是更好地更換[self.view addSubview:navController.view];
。所以我改變了我的代碼,並將導航控制器init移動到appDelegate。但沒有成功,仍然是同樣的行爲。
UITableViewController *tableController1 = [[UITableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tableController1];
NSArray* controllers = [NSArray arrayWithObjects:navController, ..., nil];
tabBarController.viewControllers = controllers;
tabBarController
只是應用程序的rootViewController。這不應該影響導航控制器及其控制器。
我認爲你是在破壞記憶。使用儀器並檢查內存和泄漏。 – 2013-03-23 23:25:43
您不應該將navController的視圖添加爲self.view的子視圖。唯一正確的做法是將navController作爲self的子視圖控制器添加,並使用自定義容器控制器api。 – rdelmar 2013-03-23 23:40:15
@rdelmar我修復了我的代碼並替換了'[self.view addSubView:]'(請參閱我的問題的編輯)。但我仍然有同樣的行爲。 – mixable 2013-03-24 09:58:23