【问题标题】:UITextField : testing text property for empty string or nil or null doesn't workUITextField:测试空字符串或 nil 或 null 的文本属性不起作用
【发布时间】:2010-08-11 00:49:23
【问题描述】:

我在测试空(或空)文本属性时遇到了这个奇怪的问题。 这是我的设置:我得到了一个包含 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];
    }
}

当我在这个界面中并在前两个字段中输入一些文本并“只是”选项卡remaning 字段和它的“完成”按钮时,这是我从 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' 处插入 nil 对象

所以,显而易见的问题是,首先isEqualtoString:nil 不起作用,其次,这个文本如何从 '' 变为 null 只是为了将焦点放在该字段上。

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

谢谢!

【问题讨论】:

标签: iphone objective-c xcode uitextfield


【解决方案1】:

我倾向于使用

if (![tmpField.text length])

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

【讨论】:

  • 这个作品,除了开头的否定。删除它,它适用于 '' 或空字符串。谢谢!但是,我仍然想知道为什么将重点放在文本字段更改上是文本值从 null 到 '' ?!?
【解决方案2】:

怎么样

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

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

【讨论】:

  • 这只有在字段获得焦点时才有效,因为它获得了一个 '' 字符串。但是如果该字段没有获得焦点,那么你得到一个 null 并且这个测试失败。
猜你喜欢
  • 1970-01-01
  • 2018-02-17
  • 2012-11-28
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
相关资源
最近更新 更多