我有一个UITextField,我试图与一个类中的字符串密码进行比较。密码为零时会出现问题。根据调试器,空UITextField
会返回@""
,因此我尝试了基于长度的appproach。
NSString *pw;
if([[alertView textFieldAtIndex:1].text length] > 0)
pw = room.password;
if([pw isEqualToString:room.password])
//do some code
但是这仍然不适用于nil密码...我甚至已经通过调试器验证了pw
和room.password
都是nil
(见下文)......最近怎么回事上?
答案 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
由于pw
是nil
,请注意,没有为该对象声明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)
如果强度是零,则它不存在,因此您无法比较它。