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"];
}
Надеюсь, это поможет вам.