UITextField: проверка свойства текста на наличие пустой строки, нуля или нуля не работает - PullRequest
5 голосов
/ 11 августа 2010

Я получил эту странную проблему при тестировании пустого (или нулевого) свойства текста.Вот мои настройки: у меня есть представление с 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

Но проблема REAL начинается, когда я возвращаюсь назад к представлению, введите некоторый текст в те же первые два поля и введите «Done»."кнопка сразу после (не проходит через другое поле, поэтому они не получают никакого фокуса).Это снова вывод 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:]: попытка вставить объект nil в 2'

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

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

Спасибо!

Ответы [ 2 ]

22 голосов
/ 11 августа 2010

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

if (![tmpField.text length])

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

3 голосов
/ 11 августа 2010

Как насчет

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...