-1

我有一个 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(见下文)......这是怎么回事?

在此处输入图像描述

4

4 回答 4

1

尝试这个:

UITextField *textField = [alertView textFieldAtIndex:1];
if (textField.text == nil) {
    //empty textField
    DoSomething();
} else {
    //textField contains text
    DoSomethingElse();
}
于 2013-08-30T20:12:05.510 回答
1

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

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

于 2013-08-30T20:10:43.270 回答
1

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

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

由于请记住,没有为该对象声明任何pw方法。nilisEqual

因此,您应该做的是:

if([pw isEqualToString:room.password] || (pw == nil && room.password == nil))
于 2013-08-30T20:10:57.887 回答
0

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

于 2013-08-30T20:15:23.123 回答