Xcode Load NSUserDefaults в нескольких контроллерах представления

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

В моем приложении есть несколько контроллеров представления, одним из которых является представление "Параметры", в котором пользователи могут изменять определенные параметры, такие как цвет фона, через сегментированный элемент управления. После нажатия пользователи нажимают кнопку, чтобы сохранить свой предпочтительный цвет в 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;

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

2 ответа

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

Создайте объект 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"];
    }

Надеюсь, это поможет вам.

Другие вопросы по тегам