2013-01-23 48 views
2

我使用NSUserDefaults保存開關打開/關閉,到目前爲止它是好的。它會記住下一個會話中的切換位置。NSUserDefault和開關

現在到我不明白的東西。 我在另一個視圖中使用相同的開關(同名),讓我們說從第一個視圖推入的翻轉視圖。如果我在第一個視圖中更改開關,它將在翻轉視圖中自動更改。 但是相反,如果我在翻轉視圖中更改它,當我返回時它不會在第一個視圖中更改。只有當我重新啓動應用程序時,第一個視圖也會改變。

我該如何解決這個問題呢?或者不需要重新啓動即可刷新第一個視圖。

回答

3

您的第一個視圖不會刷新,因爲它不會再次初始化。如果您使用ViewController,則可以在viewWillAppear中更新交換機(如果isViewLoaded)。

+0

我使用了UIBarButtonItem和@selector(refresh),然後 - (void)刷新並放入BOOL savedState中,以供涉及的交換機使用。所以按下按鈕它會再次運行通過保存的狀態並且它們被更新。有用。 –

2

您應該觀察NSUserDefaults更改對視圖感興趣的更改。

您可以使用下面的代碼來觀察其變化:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
[center addObserver:self 
      selector:@selector(defaultsChanged:) 
       name:NSUserDefaultsDidChangeNotification 
      object:nil]; 

並實現defaultsChanged方法:

- (void)defaultsChanged:(NSNotification *)notification 
{ 
    NSUserDefaults *defaults = (NSUserDefaults *)[notification object]; 
    id value = [defaults objectForKey:@"keyOfDefaultThatChanged"]; 
    self.something = [(NSNumber *)value intValue]; // For example. 
} 

不要忘了刪除觀察者時您的視圖關閉(也許在dealloc):

NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
[center removeObserver:self]; 
+0

謝謝,它可以檢查。我有很多對這個變化感興趣的觀點。 –