Невозможно установить поле NSUserDefaults - PullRequest
5 голосов
/ 31 января 2011

У меня следующий код в моей инициализации (первый раз) моего приложения:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uid=@"1";
[defaults setObject:uid forKey:@"init_val"];
[defaults synchronize];

Гораздо позже в коде (в ответ на нажатие кнопки) я проверяю значение с помощью:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *initVal=[defaults objectForKey:@"init_val"];

initVal всегда равен нулю.Я проверил, и init_val настроен точно так же в моем комплекте настроек, как и другое поле, которое я могу установить и прочитать без проблем (оба они настроены с помощью одного поля с именем «Ключ».

Ответы [ 7 ]

5 голосов
/ 18 марта 2011

@ mlewis54:

Вы можете попробовать этот код.Я очень уверен, что это будет работать для вас.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uid=@"1";
[defaults setObject:uid forKey:@"init_val"];
[defaults synchronize];

Для получения данных вы должны использовать следующий код:

NSString *initVal=[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"];

ИЛИ

NSString *initVal=[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"];

РЕДАКТИРОВАТЬ:

Если все еще он дает nil, то вы можете использовать следующий код:

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:@"init_val"]];

ИЛИ

NSString *initVal=[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"init_val"]];

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

1 голос
/ 21 февраля 2011

Замените это при событии при нажатии кнопки ...

NSUserDefaults *savedData = [NSUserDefaults standardUserDefaults];
[savedData setObject:userEmailTextField.text forKey:@"userid"];

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

userEmailTextField.text =[[NSUserDefaults standardUserDefaults]objectForKey:@"userid"];
1 голос
/ 12 февраля 2011

Вам нужно использовать строку

NSString *initVal = [defaults stringForKey:@"init_val"];

- поскольку это строка, вы должны использовать stringForKey. Вы также можете использовать boolForKey для получения логического значения.

0 голосов
/ 19 февраля 2011

У меня отлично работает с таким же кодом:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *uid=@"1";
[defaults setObject:uid forKey:@"init_val"];
[defaults synchronize];

NSUserDefaults *defaultss = [NSUserDefaults standardUserDefaults];
NSString *initVal=[defaultss objectForKey:@"init_val"];
NSLog(@"Value of initVal: %@",initVal);

O / P на консоли: значение initVal: 1

Так что попробуйте сделать это с тем же кодом, напечатанным на консоли.

0 голосов
/ 13 февраля 2011

Возможно, инициализация не происходит.Поместите туда NSLog, чтобы проверить его выполнение.

0 голосов
/ 02 февраля 2011

Вы уверены, что правильно инициализируете NSUserDefaults? Когда я инициализирую в своем делегате приложения, я всегда создаю пользовательские настройки по умолчанию, создав словарь значений по умолчанию:

[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];

Где appDefaults - словарь. Тогда вы сможете правильно получить к ним доступ.

0 голосов
/ 01 февраля 2011

В вашем коде нет ничего плохого, я попытался скопировать его в свой проект, и он работал хорошо, поэтому ваша ошибка может быть, вероятно, при проверке initVal ...

какой код вы используете, чтобы увидеть,initVal это ноль?и вы уверены, что когда / где вы проверяете initVal, этот var / oblect все еще виден?

попробуйте вставить это сразу после кода чтения:

NSLog(@"____text read in pref: %@", initVal);

это записывает это в моемокно консоли -> _ _текст читается в префе: 1

конечно, это строка NSString, я надеюсь, вы помните, что это не int или NSNumber, когдаВы проверяете это ...

Лука

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...