我在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 ...
答案 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)
这个
需要解决两件事用于文字字段编写oldMotdepasse.text
和oldLogin.text
最后也同步它[pref synchronize]
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];