【问题标题】:Compare an empty UITextField to nil string将空的 UITextField 与 nil 字符串进行比较
【发布时间】:2013-08-30 20:02:48
【问题描述】:

我有一个 UITextField,我试图将它与类中的字符串密码进行比较。当密码为零时会出现问题。根据调试器,一个空的UITextField 返回@"",所以我尝试了一种基于长度的方法。

 NSString *pw;
 if([[alertView textFieldAtIndex:1].text length] > 0)
     pw = room.password;

 if([pw isEqualToString:room.password])
  //do some code

但这仍然不适用于 nil 密码...我什至使用调试器验证了 pwroom.password 都是 nil(见下文)...这是怎么回事?

【问题讨论】:

  • 那么你想验证两者都是 nil 还是不是 nil?我不确定你在问什么。你说它不能使用 nil 密码,然后你继续说你已经验证了两个文本字段都是 nil。
  • if 比较 pwroom.password 的语句在 nil 时没有触发,我不明白为什么。
  • 因为 if 语句返回 false,因此不执行语句中的代码。你想要的结果是什么?输入是什么?您是否正在检查用户是否输入了文本?
  • 对...但是为什么返回错误?根据调试器pwroom.password都等于nil,它不应该返回true吗?
  • 不,如果你想让它返回 true,你必须询问 textField.text == nil

标签: iphone ios objective-c xcode cocoa-touch


【解决方案1】:

您可以向 nil 对象发送任何消息。

“如果您期望从发送到 nil 的消息中返回值,则返回值对于对象返回类型将为 nil,对于数字类型为 0,对于 BOOL 类型为 NO。返回的结构将所有成员初始化为零。” - 来源:https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/WorkingwithObjects/WorkingwithObjects.html

由于pwnil,请记住,没有为该对象声明isEqual 方法。

因此,你应该做的是:

if([pw isEqualToString:room.password] || (pw == nil && room.password == nil))

【讨论】:

    【解决方案2】:

    问题是您正在向 nil 发送消息。那永远不会返回 TRUE。

    pw 无法响应 isEqualToString: 选择器,因为它为 nil。

    【讨论】:

      【解决方案3】:

      试试这个:

      UITextField *textField = [alertView textFieldAtIndex:1];
      if (textField.text == nil) {
          //empty textField
          DoSomething();
      } else {
          //textField contains text
          DoSomethingElse();
      }
      

      【讨论】:

        【解决方案4】:

        如果 strong 为零,则它不存在,因此您无法比较它。

        【讨论】:

          猜你喜欢
          • 2010-10-06
          • 1970-01-01
          • 2018-10-02
          • 2012-02-01
          • 2012-10-06
          • 2019-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多