2014-01-14 2 views
0

Я провел тщательное исследование, но, похоже, не нашел ответа, который я ищу. Надеюсь, кто-то может помочь.Xcode Load NSUserDefaults в нескольких viewcontrollers

У меня есть несколько контроллеров в моем приложении, один из которых представляет собой «вариант», в котором пользователи могут изменять определенные настройки, такие как цвет фона, через сегментированный элемент управления. После нажатия кнопки пользователи нажимают кнопку, чтобы сохранить цвет предпочтений в NSUserDefaults. Это работает отлично, и в следующий раз, когда приложение откроется, правильный цвет все еще выбран. Но только в контроллере представления параметров.

Как я могу получить этот выбранный цвет фона для загрузки в других контроллерах представления? Кажется, я не запускаю его, внедряя его в ViewDidLoad из моих других представлений, как это было в представлении параметров (см. Ниже).

Мой код в options.m выглядит следующим образом:

- (IBAction)changeColor { 
    switch (colorControl.selectedSegmentIndex) { 
     case 0: 
      [colorView setBackgroundColor:[UIColor redColor]]; 
      break; 
     case 1: 
      [colorView setBackgroundColor:[UIColor blackColor]]; 
      break; 
     case 2: 
      [colorView setBackgroundColor:[UIColor brownColor]]; 
      break; 
     default: 
      break; 
    } 
} 

- (IBAction)saveDefaultColor { 
    int defaultColorInteger = colorControl.selectedSegmentIndex; 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setInteger:defaultColorInteger forKey:@"defaultColor"]; 
    [userDefaults synchronize]; 
} 

выше являются контроль и сохранить кнопку. В моей ViewDidLoad я включил следующие:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
int defaultColorInteger = [userDefaults integerForKey:@"defaultColor"]; 

[colorControl setSelectedSegmentIndex:defaultColorInteger]; 

switch (colorControl.selectedSegmentIndex) { 
    case 0: 
     [colorView setBackgroundColor:[UIColor redColor]]; 
     break; 
    case 1: 
     [colorView setBackgroundColor:[UIColor blackColor]]; 
     break; 
    case 2: 
     [colorView setBackgroundColor:[UIColor brownColor]]; 
     break; 

    default: 
     break; 

Это работает точно так, как я хочу, но я не могу получить его работу в других моих взглядов. Может ли кто-нибудь помочь мне с тем, что мне кажется недостающим? Большое спасибо

+0

- это код точно такой же, как в других представлениях? особенно ключевое имя –

+0

сначала попробуйте NSLog your int, чтобы узнать, получаете ли вы правильное значение. во-вторых, попробуйте выполнить его @ viewWillApear или viewDidLayoutSubviews –

+0

Я добавил следующее: NSLog (@ "default Цвет:% i", defaultColorInteger); Это действительно возвращает правильное значение, так как оно указывает цвет по умолчанию: 2 (например). Я скопировал точные строки с первого взгляда на второй, поэтому никаких опечаток не создано, но все же я не могу заставить его работать, также когда я использую метод viewWillAppear. Не могли бы вы привести мне пример того, как это реализовать? Спасибо – Harold

ответ

2

Думаю, вам нужно проверить значения ключей в других представлениях, поскольку NSUserDefaults сохраняет данные для всего приложения не для одного представления. Может быть, вы не кладете ключи должным образом.

0

Создайте объект NSUserDefault в любом из ViewController и установите пару значений ключа как объекты в объекте userDefault.

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 
    if (standardUserDefaults) 
    { 
     [standardUserDefaults setObject:@"stringUserName" forKey:@"UserName"]; 
     [standardUserDefaults setObject:@"idfv" forKey:@"DeviceCode"]; 
     [standardUserDefaults synchronize]; 
    } 

Затем к нему доступ из второго ViewController, вы должны написать код, приведенный ниже во втором ViewController

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 
    NSString *userName; 
    NSString *deviceCode; 
    if (standardUserDefaults) 
    { 
     userName = (NSString*)[standardUserDefaults objectForKey:@"UserName"]; 
     deviceCode = (NSString*)[standardUserDefaults objectForKey:@"DeviceCode"]; 
    } 

Надежда это поможет вам.

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