У меня возникла эта странная проблема с тестированием пустого (или нулевого) текстового свойства. Вот моя настройка: у меня есть представление с 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 только из-за того, что фокус находится на поле.
Итак, есть ли лучший способ проверить пустое поле?
Спасибо!