NSString内存错误/崩溃

时间:2011-12-27 19:57:08

标签: iphone objective-c ios nsstring

我有用户名和密码的UITextField,一旦用户点击我做的提交按钮

 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];

但是,当我尝试这种情况时,有时候我的url出现了EXEC_BAD_ACCESS问题,我使用了Zombie工具并将其钉死了%@是导致url字符串问题的工具。 %@期待一个NSZtring的user_name,pass_word但不知何故在这个过程中,user_name和pass_word被变异并获得了一些垃圾值,而不再是NSString。

我尝试使用[user_name retain]; [pass_word retain]; [url retain];但没有帮助。它与网址的%@参数一起出现EXEC_BAD_ACCESS问题。

其次我能够输出user_name,pass_word,它有时会得到一些没有意义的值。我不是他们获得这些价值观的地方。我没有把这些值放入。我正在进行http调用。不知怎的,http返回值潜入了pass_word和user_name,我不知道为什么会这样做。

3 个答案:

答案 0 :(得分:2)

  

其次我能够输出user_name,pass_word,它有时会得到一些没有意义的值。

这通常意味着您分配的不是初始化变量......如果您尝试nslog值,它会解释崩溃。但是你不可能从答案中包含的部分代码中找出错误。

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

答案 1 :(得分:1)

来自评论:

  

我在common.h文件中声明了很多NSString * user_name,* pass_word   文件需要访问该文件。

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

然后在NSString上使用一个类别(称之为NSString + Authentication),该类别具有从钥匙串中提取数据以及将其插入钥匙串的方法。

答案 2 :(得分:0)

尝试使用分配,看看是否有帮助:

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