EXC_BAD_ACCESS на NSUserDefaults - PullRequest
       20

EXC_BAD_ACCESS на NSUserDefaults

0 голосов
/ 16 января 2012

Я получаю EXC_BAD_ACCESS для NSUserDefaults:

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
[pref setObject:oldLogin forKey:@"login"];
[pref setObject:oldMotdepasse forKey:@"pass"];
[pref setObject:@"OK" forKey:@"opening"];

Где oldLogin и oldMotdepasse - это UITextField.

Я не получил эту ошибку раньше, это очень странно. Ошибка появляется на первом setObject.

Спасибо, что прочитали меня!

РЕДАКТИРОВАТЬ: теперь у меня есть другая ошибка argh:

-[NSCFString text]: unrecognized selector sent to instance 0x4b3b2d0
2012-01-16 10:32:02.601 emars[60602:b303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString text]: unrecognized selector sent to instance 0x4b3b2d0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00fb75a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x0110b313 objc_exception_throw + 44
    2   CoreFoundation                      0x00fb90bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x00f28966 ___forwarding___ + 966
    4   CoreFoundation                      0x00f28522 _CF_forwarding_prep_0 + 50
    5   emars                               0x00008ddf -[ThirdViewController connectionDidFinishLoading:] + 932
    6   Foundation                          0x0006a112 -[NSURLConnection(NSURLConnectionReallyInternal) sendDidFinishLoading] + 108
    7   Foundation                          0x0006a06b _NSURLConnectionDidFinishLoading + 133

РЕДАКТИРОВАТЬ: Хорошо, я использовал oldLogin в качестве поля UIText. Я просто изменяю его тип на NSString и удаляю .text ...

Ответы [ 4 ]

3 голосов
/ 16 января 2012

Вы не можете просто поместить UITextField в NSUserDefaults, которое не будет работать.Вы должны получить строковое значение из UITextField и поместить его в NSUserDefaults.[prefs setObject:oldLogion.text forKey:@"login"]

2 голосов
/ 16 января 2012

из NSUserDefault документации.

Класс NSUserDefaults предоставляет удобные методы для доступа к распространенным типам, таким как числа с плавающей запятой, двойные числа, целые числа, логические значения и URL-адреса.Объектом по умолчанию должен быть список свойств, то есть экземпляр (или для коллекций комбинация экземпляров): NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary.Если вы хотите сохранить какой-либо другой тип объекта, вам, как правило, следует заархивировать его, чтобы создать экземпляр NSData.

вы пытаетесь сохранить UITextField .. что неправильно .. Так что предлагаювставить текстовые значения UITextField вместо хранения всего объекта.

2 голосов
/ 16 января 2012

Вы пытаетесь сохранить текст в текстовых полях?Если так, то это должно быть

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
[pref setObject:oldLogin.text forKey:@"login"];
[pref setObject:oldMotdepasse.text forKey:@"pass"];
[pref setObject:@"OK" forKey:@"opening"];
1 голос
/ 16 января 2012

Есть две вещи, которые необходимо исправить в этом

  1. для ввода в текстовое поле oldMotdepasse.text и oldLogin.text

  2. В концетакже синхронизировать его [pref synchronize]

Например:

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
[pref setObject:oldLogin.text forKey:@"login"];
[pref setObject:oldMotdepasse.text forKey:@"pass"];
[pref setObject:@"OK" forKey:@"opening"];
[pref synchronize];
...