2011-12-27 75 views
-3

我的UITextField的用户名和密码,一旦用户点击提交按钮,我做NSString的内存错误/崩溃

NSString* user_name; 
NSString* pass_word; 
UITextField * username; 
UITextField * password; 
NSString * url; 

user_name=username.text; 
pass_word=password.text; 


    url = [[NSString stringWithFormat:@"devices.json?user=%@&pswd=%@", user_name,pass_word]; 

然而,当我尝试,有时我EXEC_BAD_ACCESS问题与网址,我用了僵尸工具并钉上它%@是导致与url字符串问题的一个。 %@期待user_name,pass_word的NSString,但在过程中,某种程度上,user_name和pass_word发生了变异,并且获得了一些垃圾值,而不是NSString了。

我尝试使用[USER_NAME保留]; [pass_word retain]; [url保留];但没有帮助。它保持与URL的%@参数有EXEC_BAD_ACCESS问题。

其次我能够输出的USER_NAME,pass_word,有时有一些值是没有道理的。我不知道他们在哪里得到这些价值。我没有把这些值。我正在进行一个http调用。不知何故,http返回值隐藏在pass_word内,而user_name,我不知道为什么它会这样做。

+0

这是所有的代码完全相同的方式它的真正使用呢? – 2011-12-27 20:03:50

+0

您可以发布按下提交按钮时调用的整个方法吗? Cherry挑选的代码并不是那么有用。 – 2011-12-27 20:04:37

+0

尝试创建属性到文本字段,然后合成它并查看结果。我认为这应该工作。 – Sandeep 2011-12-27 20:07:38

回答

1

从评论:

我宣布的NSString * USER_NAME,* pass_word common.h中的文件,其中许多文件 需要访问一个。

除非你有一个单例类,否则每次你分配/初始化一个新的Common对象时,它都会有垃圾值。 Objective-C最佳实践建议不要这种设计。对于大多数数据来说,存储在plist或NSUserDefaults中是可以的,但对于用户名和密码字符串,您应该将其存储在钥匙串中。更好的是,如果服务器接受它,你应该将密码存储为散列。

然后使用上的NSString(称之为类似的NSString +认证),有方法从钥匙链拉出数据,以及将其插入钥匙串类别。

0

尝试使用分配以及并看看是否有帮助:

url = [[NSString alloc] initWithFormat:@"devices.json?user=%@&pswd=%@", user_name,pass_word]; 
+0

这将如何帮助? '+ stringWithFormat:'只是一个调用'-initWithFormat:'的简便方法。 – 2011-12-27 20:29:17

+0

不同之处在于stringWithFormat返回一个autorelease字符串,这个会创建一个内存泄漏..我认为这不会有帮助。 – Bastian 2011-12-27 20:38:28

+0

是的,这个改变不能解决OP的问题。 – 2011-12-27 20:41:38

2

其次我能够输出的USER_NAME,pass_word,有时有一些值是没有道理的。

这通常意味着您分配未初始化的变量......并且它解释了如果您尝试nslog值的情况下崩溃。但是不可能从您的答案中包含的部分代码中找出问题所在。

尝试登录用户名和密码的内容。 (uitextfields)..你应该使用更好的变量名称。

+0

NSLog包含%@期望NSString,如果它突变并成为其他的NSString,那么NSLog也会崩溃。 – lilzz 2011-12-27 21:47:56