NSUserDefaults 上的 EXC_BAD_ACCESS

发布于 2024-12-27 05:37:57 字数 1594 浏览 2 评论 0原文

我在 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...

I'm getting a EXC_BAD_ACCESS on NSUserDefaults :

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

Where oldLogin and oldMotdepasse are UITextField.

I didn't get this error before, it's very strange. The error appears on the first setObject.

Thanks to read me!

EDIT : now I've got another error 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 :
Okay, I used oldLogin as a UITextfield. I just change its type to NSString and delete the .text...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

瘫痪情歌 2025-01-03 05:37:57

你不能只是将 UITextField 放入 NSUserDefaults 中,这是行不通的。您必须从 UITextField 获取字符串值并将其放入 NSUserDefaults 中。 [prefs setObject:oldLogion.text forKey:@"login"]

You can't just put a UITextField into NSUserDefaults that won't work. You have to get the string value from the UITextField and put that into NSUserDefaults. [prefs setObject:oldLogion.text forKey:@"login"]

温柔一刀 2025-01-03 05:37:57

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

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

Are you trying to store the text in the text fields? If so then it should be

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
[pref setObject:oldLogin.text forKey:@"login"];
[pref setObject:oldMotdepasse.text forKey:@"pass"];
[pref setObject:@"OK" forKey:@"opening"];
智商已欠费 2025-01-03 05:37:57

来自 NSUserDefault 文档。

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

您正在尝试存储 UITextField.. 这是错误的.. 因此建议您插入 UITextField 的文本值,而不是存储整个对象。

from NSUserDefault documentation.

The NSUserDefaults class provides convenience methods for accessing
common types such as floats, doubles, integers, Booleans, and URLs. A
default object must be a property list, that is, an instance of (or
for collections a combination of instances of): NSData, NSString,
NSNumber, NSDate, NSArray, or NSDictionary. If you want to store any
other type of object, you should typically archive it to create an
instance of NSData.

you are trying to store the UITextField.. which is wrong .. So would suggest you to insert the text values of UITextField instead storing the whole object.

宫墨修音 2025-01-03 05:37:57

中需要修复两件事,

  1. 在这个

    文本字段写入oldMotdepasse.textoldLogin.text

  2. 最后也同步它 [pref一线同步]

例如:

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

There are Two things need to fix in this

  1. for text Field write oldMotdepasse.text and oldLogin.text

  2. At the end also synchnorize it [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];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文