NSUserDefaults上的EXC_BAD_ACCESS

时间:2012-01-16 09:05:47

标签: iphone xcode ios4 nsuserdefaults exc-bad-access

我在NSUserDefaults上获得了EXC_BAD_ACCESS:

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

其中oldLogin和oldMotdepasse是UITextField。

之前我没有收到此错误,这很奇怪。错误出现在第一个setObject。

感谢您的阅读!

编辑:现在我又遇到了另一个错误:

-[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作为UITextfield。我只是将其类型更改为NSString并删除.text ...

4 个答案:

答案 0 :(得分:3)

您不能只将UITextField放入无法使用的NSUserDefaults中。您必须从UITextField获取字符串值并将其放入NSUserDefaults。 [prefs setObject:oldLogion.text forKey:@"login"]

答案 1 :(得分:2)

您是否尝试将文字存储在文本字段中?如果是,那么它应该是

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

答案 2 :(得分:2)

来自NSUserDefault文档。

  

NSUserDefaults类提供了便于访问的方法   常见类型,例如浮点数,双精度数,整数,布尔值和URL。一个   默认对象必须是属性列表,即(或   对于集合的实例组合):NSData,NSString,   NSNumber,NSDate,NSArray或NSDictionary。如果你想存储任何   在其他类型的对象中,通常应将其存档以创建   NSData的实例。

你试图存储UITextField ..这是错误的。所以建议你插入UITextField的文本值,而不是存储整个对象。

答案 3 :(得分:1)

这个

需要解决两件事
  1. 用于文字字段编写oldMotdepasse.textoldLogin.text

  2. 最后也同步它[pref synchronize]

  3. E.g:

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