我有一個方法,當在我的根視圖中點擊一個設置按鈕時,該子類將兩個UIViewControllers附加到一個UITabBarController並將UITabBarController推到導航棧上:UITabBarController似乎打開一個視圖,然後關閉另一個視圖
-(IBAction)onSettings:(id)sender {
// Create the Settings Views
SettingsViewController *vcSettings1 = [[Settings1ViewController alloc] initWithNibName:@"Settings1ViewController" bundle:nil];
Settings2ViewController *vcSettings2 = [[Settings2ViewController alloc] initWithNibName:@"Settings2ViewController" bundle:nil];
// Create the Tab View
UITabBarController *tabController= [[UITabBarController alloc] init];
tabController.viewControllers = @[vcSettings1,vcSettings2];
// Pass the Index of the database on to the views so they can pull the record from the database
vcSettings.recordIndex = recordIndex;
vcSettings2.recordIndex = recordIndex;
// Add the tab bar controller to the navigation stack
[self.navigationController pushViewController:tabController animated:YES];
}
在每個設置視圖中,我重寫viewWillAppear方法以從主鍵recordIndex處的sqlite數據庫加載一行數據。 (這兩個視圖都拉同一條記錄,並顯示記錄中的不同數據,除了兩個字段相同。)
我還覆蓋了每個視圖中的viewWillDisappear以將控件數據保存回數據庫。
我可以驗證每次使用標籤欄切換視圖時,在一個關閉視圖上調用viewWillDisappear方法,並在打開視圖上調用viewWillAppear。
問題是,當我在第一個視圖上更改數據並切換到第二個視圖時,第二個視圖上的數據不會更改,除非我返回到第一個視圖,然後返回到第二個視圖。盡我所能,這裏是似乎正在發生的事情:
- 查看1已打開。我改變了現場的數據。
- 我點擊查看2的選項卡
- viewWillAppear被稱爲查看2,用數據庫中的舊數據填充查看2中的字段。
- viewWillDisappear然後調用View 1,將更改的數據保存到數據庫。
看來,開放視圖調用viewWillAppear之前,關閉視圖調用viewWillDisappear。
我已經嘗試了其他方式,例如使用單例,並試圖從兩個視圖修改recordIndex,並且在所有情況下,似乎數據都是從關閉視圖保存之前從開始視圖加載的。
這是一個UITabBarController工作方式的錯誤,還是我濫用viewWillAppear和消失的方式,我不應該?有沒有其他人跑過這種行爲?
感謝JP同意,我喜歡「更新的變化是由」的想法更好,然後我在做什麼,和你對,這似乎應該是未來證明應用程序很好。非常感激! –