将空UITextField与nil字符串进行比较

时间:2013-08-30 20:02:48

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

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

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

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

但是这仍然不适用于nil密码...我甚至已经通过调试器验证了pwroom.password都是nil(见下文)......最近怎么回事上?

enter image description here

4 个答案:

答案 0 :(得分:1)

问题是你要向nil发送消息。这永远不会返回TRUE。

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

答案 1 :(得分: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 :(得分:1)

试试这个:

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

答案 3 :(得分:0)

如果强度是零,则它不存在,因此您无法比较它。