我使用NSUserDefaults保存開關打開/關閉,到目前爲止它是好的。它會記住下一個會話中的切換位置。NSUserDefault和開關
現在到我不明白的東西。 我在另一個視圖中使用相同的開關(同名),讓我們說從第一個視圖推入的翻轉視圖。如果我在第一個視圖中更改開關,它將在翻轉視圖中自動更改。 但是相反,如果我在翻轉視圖中更改它,當我返回時它不會在第一個視圖中更改。只有當我重新啓動應用程序時,第一個視圖也會改變。
我該如何解決這個問題呢?或者不需要重新啓動即可刷新第一個視圖。
我使用NSUserDefaults保存開關打開/關閉,到目前爲止它是好的。它會記住下一個會話中的切換位置。NSUserDefault和開關
現在到我不明白的東西。 我在另一個視圖中使用相同的開關(同名),讓我們說從第一個視圖推入的翻轉視圖。如果我在第一個視圖中更改開關,它將在翻轉視圖中自動更改。 但是相反,如果我在翻轉視圖中更改它,當我返回時它不會在第一個視圖中更改。只有當我重新啓動應用程序時,第一個視圖也會改變。
我該如何解決這個問題呢?或者不需要重新啓動即可刷新第一個視圖。
您的第一個視圖不會刷新,因爲它不會再次初始化。如果您使用ViewController,則可以在viewWillAppear中更新交換機(如果isViewLoaded)。
您應該觀察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];
謝謝,它可以檢查。我有很多對這個變化感興趣的觀點。 –
我使用了UIBarButtonItem和@selector(refresh),然後 - (void)刷新並放入BOOL savedState中,以供涉及的交換機使用。所以按下按鈕它會再次運行通過保存的狀態並且它們被更新。有用。 –