UITextField: проверка текстового свойства на наличие пустой строки или нуля или нуля не работает

У меня возникла эта странная проблема с тестированием пустого (или нулевого) текстового свойства. Вот моя настройка: у меня есть представление с 6 текстовыми полями, и вот код, который я использую для перехода через эти поля (загруженный в массив NSMutable)...

NSEnumerator *portsEnumerator = [appliancePorts objectEnumerator];
UITextField *tmpField;
newSite.port = [NSMutableArray array];
while (tmpField =[portsEnumerator nextObject]) {
    NSLog(@"value:%@",tmpField.text);
    if (![tmpField.text isEqualToString:nil]) {
        [newSite.port addObject:(NSString *)tmpField.text];
    }
}

Когда я нахожусь в этом интерфейсе и набираю текст в первых двух полях и «просто» вкладываю в оставшееся поле и нажимаю кнопку «Готово», вот что я получил из вывода GDB:

2010-08-10 20:16:54.489 myApp[4883:207] value:Value 1

2010-08-10 20:16:58.115 myApp[4883:207] value:Value 2

2010-08-10 20:17:02.002 myApp[4883:207] value:

2010-08-10 20:17:13.034 myApp[4883:207] value:

2010-08-10 20:17:15.854 myApp[4883:207] value:

2010-08-10 20:17:17.762 myApp[4883:207] value:

Я знаю, что если я проверяю пустую строку, она должна работать, потому что свойство text при выводе дампа на консоль показывает следующее:

UITextField: 0x5d552a0; frame = (20 8; 260 30); text = ''; clipsToBounds = YES; opaque = NO; tag = 1; layer = CALayer: 0x5d54f20

Но НАСТОЯЩАЯ проблема начинается, когда я возвращаюсь к представлению, ввожу некоторый текст в те же первые два поля, а сразу после этого нажимаю кнопку «Готово» (не проходя через другое поле, поэтому они не получают никакого фокуса). Это снова вывод GDB...

2010-08-10 20:23:27.902 myApp[4914:207] value:Value 1

2010-08-10 20:23:31.739 myApp[4914:207] value:Value 2

2010-08-10 20:23:34.523 myApp[4914:207] value:(null)

2010-08-10 20:23:56.443 myApp[4914:207] * Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "* -[NSMutableArray insertObject:atIndex:]: попытка вставки нулевой объект на 2 '

Итак, очевидные проблемы заключаются в том, что, во-первых, isEqualtoString:nil не работает, а во-вторых, почему этот текст меняется с '' на null только из-за того, что фокус находится на поле.

Итак, есть ли лучший способ проверить пустое поле?

Спасибо!


person Steve S.    schedule 11.08.2010    source источник
comment
если вы используете UITextView, то stackoverflow.com/a/8238742/1660139   -  person Haider    schedule 14.12.2012
comment
если вы используете UITextView, эта ссылка поможет stackoverflow.com/a/8238742/1660139   -  person Haider    schedule 14.12.2012


Ответы (2)


я склонен использовать

if (![tmpField.text length])

Это пропустит его, если он либо ноль, либо @"". то есть он находит длину строки, и если она равна 0 (что было бы в случае, если строка была пустой или нулевой), она не выполняла команду IF.

person Helen    schedule 11.08.2010
comment
Эта работа, кроме отрицания в начале. Удалите его, и он будет работать для '' или нулевой строки. Спасибо! Но все же мне интересно, почему фокус на изменении текстового поля - это текстовое значение с нуля на ''?!? - person Steve S.; 11.08.2010

Как насчет

if (![tmpField.text isEqualToString:@""])
  • который проверяет пустую строку, а не нулевую строку.

Есть много других способов, включая проверку длины строки. Обратите внимание, что вы можете отправить сообщение нулевому объекту без проблем, поэтому, если tmpField.text был нулевым, тогда тест завершится успешно (и вы вылетите при попытке добавить нулевой объект в свой массив) - но тест, который вы хотите, это отправить сообщение объекту NSString с запросом, является ли он пустым или нет.

person Adam Eberbach    schedule 11.08.2010
comment
Это будет работать только в том случае, если поле получило фокус, потому что оно получает строку ''. Но если поле не получило фокуса, то вы получили ноль, и этот тест не пройден. - person Steve S.; 11.08.2010