UITextField:测试空字符串或nil或null的text属性不起作用

时间:2010-08-11 00:49:24

标签: iphone objective-c xcode uitextfield

我在测试空(或null)文本属性时遇到了这个奇怪的问题。 在这里我的设置:我有一个带有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问题开始,在同一个前两个字段中输入一些文本,然后在“完成”按钮后面输入(不通过其他字段,因此它们不会得到任何焦点)。这又是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'

处插入nil对象

所以,显而易见的问题是,isEqualtoString:nil首先不起作用,其次,为了把重点放在场上,这个文本怎么会从''变为null。

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

谢谢!

2 个答案:

答案 0 :(得分:22)

我倾向于使用

if (![tmpField.text length])

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

答案 1 :(得分:3)

怎么样

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

还有许多其他方法,包括测试字符串的长度。请注意,您可以毫无问题地向nil对象发送消息,因此如果tmpField.text为nil,则测试将成功(并且在尝试将nil对象添加到阵列时会崩溃) - 但是您想要的测试是向NSString对象发送消息,询问它是否为空。