2013-01-23 2 views
2

Я использую NSUserDefaults для сохранения включения/выключения, и пока это хорошо. Он запоминает положение переключателя в следующем сеансе.NSUserDefault и переключатели

Теперь к тому, что я не понимаю. Я использую один и тот же переключатель (с тем же именем) в другом представлении, скажем, флип-представление, которое вставляется с первого вида. Если я сменил переключатель в первом представлении, он автоматически изменится в флип-представлении. Но наоборот, если я изменю его в перевороте, он не изменится в первом представлении, когда я вернусь. Только если я перезапущу приложение, первое представление также будет изменено.

Как я могу решить эту проблему в одно и то же время? Или вроде обновите первое представление без необходимости перезапуска.

ответ

3

Ваш первый вид не обновляется, так как он не инициализируется снова. Если вы используете ViewControllers, вы можете обновить свой переключатель в viewWillAppear (если isViewLoaded).

+0

Я использовал UIBarButtonItem и @selector (обновить), а затем - (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

Спасибо, он работает, чтобы проверить. У меня много взглядов, которые интересуются изменениями. –

Смежные вопросы