2012-01-16 3 views
0

Я получаю EXC_BAD_ACCESS на NSUserDefaults: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.

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

EDIT: теперь у меня есть еще один 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 

EDIT: Хорошо, я использовал oldLogin как UITextField. Я просто меняю свой тип на NSString и удаляю .text ...

+0

Проверьте, является ли oldLogin действительным obj .. –

ответ

3

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

+0

ОК спасибо, я уже забыл об этом, но теперь у меня есть сигнал SIGABRT на той же строке ... – clement

+0

убедитесь, что oldLogin и oldMotdepasse действительны и действительно являются объектом UITextFiled. И вы включили NSZombie? – V1ru8

+0

Как я могу проверить срок действия? У меня есть только эта ошибка. Нужно ли активировать зомби? :-) – clement

2

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

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

7KV7: Спасибо! Теперь у меня есть сигнал SIGABRT: -S – clement

1

Есть две вещи нужно исправить в этом

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

  2. В конце также synchnorize это [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]; 
+0

сто благодарностей: DI просто забыл положить .text, я был уверен, что он не запрашивает его, но .... Спасибо – clement

+0

hum теперь у меня есть сигнал SIGABRT на той же линии : -/ – clement

+0

Вы подключили textField к розетке и убедитесь, что вы не выпустили текстовое поле, попробуйте эту вещь, когда вы собираетесь устанавливать значения [NSString stringWithFormat: @ "% @", oldLogin.text]; – dark

2

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

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

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

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