UITextField:测试文本属性为空字符串或零或空不起作用

问题描述:

我得到这个奇怪的问题测试空(或空)文本属性。 这里我的设置:我买了它6文本框,在这里我用走通的领域(在NSMutable装阵)的代码视图...UITextField:测试文本属性为空字符串或零或空不起作用

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: 

我知道,如果我测试空字符串它应该工作因为转储到控制台时的文本属性显示:

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

但是,当我返回视图时,REAL问题开始,在相同的前两个字段中输入一些文本,并且紧跟其后的“完成”按钮(不通过另一个字段,因此它们没有获得任何焦点)。这又是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不工作,第二,是怎么来的这个文本改变'以只是将重点放在该领域的问题上。

那么,有没有更好的方法来测试空场?

谢谢!

+0

如果您使用UITextView然后http://stackoverflow.com/a/8238742/1660139 – Haider 2012-12-14 13:22:43

+0

如果您使用UITextView那么这个链接将有助于http://stackoverflow.com/a/8238742/1660139 – Haider 2012-12-14 13:23:10

我倾向于使用

if (![tmpField.text length]) 

这将错过它,如果它nil或者@ “”。即它找到了字符串的长度,如果它是0(如果字符串是空的或零的话就是这种情况),它不执行IF命令。

+0

+1 - 更好的方法 – jrtc27 2010-08-11 06:35:24

+0

这项工作,除了在开始否定。删除它,它适用于''或空字符串。谢谢!但是,我仍然想知道为什么把焦点放在文本字段上的变化是文本值从null到''?!? – 2010-08-11 12:38:06

如何

if (![tmpField.text isEqualToString:@""]) 
  • ,对于一个空字符串,而不是一个零字符串测试。

还有很多其他的方法,包括测试字符串的长度。注意,如果tmpField.text没有问题,可以将消息发送给nil对象,所以如果tmpField.text为零,那么测试会成功(并且在尝试向数组中添加nil对象时会崩溃) - 但是您想要的测试是向NSString对象发送一条消息,询问它是否为空。

+0

这将工作只有当字段得到焦点,因为它得到一个''字符串。但是,如果该领域没有得到重点,那么你得到一个空值,这个测试失败。 – 2010-08-11 12:36:03