2012-12-30 35 views
1

在我的iPhone應用程序,有兩個UIViewControllers;都嵌入在UITabBarController中。但是,當輕擊TabBarController和VC的開關時,VC屏幕將數據上傳到NSUserDefaults,然後切換到的VC從NSUserDefaults中獲取該數據。如何傳遞兩個UIViewControllers之間的信息的一個的UITabBarController

我目前做的是在第一個VC的viewWillDisappear上傳數據,然後在第二個VC的viewWillAppear中獲取它。 的問題是,即將獲得把屏幕上的VC的viewWillAppear中的「舊」 VC的viewWillDisappear之前,所以它會嘗試獲取還未被上傳的數據調用。

我可以用這樣的「老VC」是第一個新的獲取這些數據之前,知道什麼時候是準備去離屏幕,因此它可以將數據上傳?我也嘗試設置一個UITabBArControllerDelegate,這樣舊的VC就會收到--tabBarController:didSelectViewController:但是也會被調用得太晚。

回答

4

如果你不打算下傳輸大量的信息,你可以使用默認的變量爲許多可用選項之一。它可能不是最好的,但它會工作。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:Variable forKey:@"variable"]; 
    [defaults synchronize]; 

要設置變量

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *fetchVariable = [defaults objectForKey:@"variable"]; 

在其他VC進行檢索。

+0

是的,我得到了那部分覆蓋,問題是何時上傳變量,所以它發生在下一個vc下載之前 –

+1

對不起,我誤解了這個問題! – Naux

+0

這個答案幫了我。我過去一天想做這樣的事情。非常感謝@Naux。 – Donovan

0

我可以使用什麼,以便「舊VC」是第一個知道何時離開屏幕以便在新數據獲取該數據之前上傳數據?

您可以嘗試使用– tabBarController:didSelectViewController: UITabBarControllerDelegate方法將數據保存在NSUserDefaults;這應當在任何控制器中的viewWillAppear之前確定調用。

如果您想保留目前的方法,請嘗試在第二個視圖控制器中使用viewDidAppear:而不是viewWillAppear:。 如果您沒有從NSUserDefaults獲取大量數據(我猜應該是這種情況),並且您的第二個視圖控制器UI在顯示數據時沒有出現延遲,這應該可以正常工作。

你有另一種方法是使第一控制器NSUserDefaults每次改變時間更新其數據。

+0

是的,我這樣做,但後來我不得不重新加載數據,所以它在屏幕上閃爍,然後更新的版本出現後第二秒 –

+0

使用'tabBarController:didSelectViewController'做什麼保存... – sergio

0

寫入和回讀聽起來像是不必要的開銷。當然,除非你需要寫它。

我會讓前面的UIViewController將包裝在對象中的所有數據傳遞給UITabBarController,然後將其傳遞給新的UIViewController。如果這是所有選項卡(或大多數選項卡)的模式,請創建一個新協議並讓您的實施。然後您的UITabBarController就可以通過簡單地檢查控制器是否符合您的協議來找出哪些控制器需要它。

相關問題