Ошибка памяти / сбой строки NSString - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть 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];

Однако, когда я пытался это сделать, иногда у меня возникала проблема EXEC_BAD_ACCESS с URL, я использовал инструмент Zombie и прибил его% @ - это причина проблемы со строкой URL. % @ ожидает NSString user_name, pass_word, но каким-то образом в процессе, user_name и pass_word были видоизменены и получили некоторые ненужные значения, больше не NSString.

Я пытаюсь использовать [user_name retain]; [pass_word сохранить]; [сохранить URL]; но не помогло По-прежнему возникает проблема EXEC_BAD_ACCESS с параметром% @ URL-адреса.

во-вторых, я смог вывести user_name, pass_word, иногда он получал некоторые значения, которые не имеют смысла. Я не знаю, откуда у них эти ценности. Я не вводил эти значения. Я делаю http-вызов. каким-то образом HTTP вернул значения, скрытые внутри pass_word и user_name, я понятия не имею, почему он это делает.

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

во-вторых, я смог вывести имя_пользователя, пароль_отхода, иногда он получал некоторые значения, которые не имеют смысла.

обычно это означает, что вы присваиваете неинициализированные переменные ... и это объясняет сбои, если вы пытаетесь nslog значения. но выяснить, что не так, по той части кода, которую вы включили в свой ответ, невозможно.

попробуйте войти в систему с именем пользователя и паролем. (поля uitext) .. вы должны использовать лучшие имена переменных.

1 голос
/ 28 декабря 2011

Из комментария:

Я объявляю NSString * user_name, * pass_word в файле common.h, который многие файлы должны иметь доступ к этому.

Если у вас нет одноэлементного класса, каждый раз, когда вы выделяете / инициализируете новый Common объект, он будет иметь значения корзины. Рекомендации Objective-C рекомендуют против такого рода дизайна. Для большинства данных лучше всего хранить их в plist или в NSUserDefaults, но для строки имени пользователя и пароля вы должны хранить их в цепочке для ключей. Более того, вы должны хранить свой пароль в виде хэша, если сервер его примет.

Затем используйте категорию в NSString (назовите ее чем-то вроде NSString + Authentication), у которой есть методы для извлечения данных из цепочки для ключей, а также вставки их в цепочку для ключей.

0 голосов
/ 28 декабря 2011

Попробуйте также использовать распределение и посмотрите, поможет ли оно:

url = [[NSString alloc] initWithFormat:@"devices.json?user=%@&pswd=%@", user_name,pass_word];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...