iOS无法检查对象是否为空

Uff*_*ffo 6 ios ios5

所以我有以下代码:

- (IBAction)doSomething
{
if (txtName.text != (id)[NSNull null] || txtName.text.length != 0 ) {
    NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@", txtName.text];
    [lblMessage setText:msg];
}

}
Run Code Online (Sandbox Code Playgroud)

txtName是一个UITextField,我做错了什么?我只是在用户在框中输入内容时才会显示一些文字.

最好的祝福,

Vla*_*mir 11

文本字段中的文本是NSString实例或nil值,它永远不会等于NSNull类的实例(与nil不同).因此,当第一次比较始终为真时,整个if条件的计算结果为true,并显示消息.

你可以纠正你的if条件

if (txtName.text != nil && txtName.text.length != 0 )
Run Code Online (Sandbox Code Playgroud)

或者,因为向nil发送长度消息,无论如何都将返回0

if (txtName.text.length != 0 )
Run Code Online (Sandbox Code Playgroud)

虽然我通常使用第一个选项进行2次比较


Ada*_*ght 6

if (txtName.text != (id)[NSNull null] || txtName.text.length != 0 ) {

将其读作"如果文本为空或长度不为0"

txtName.text从来没有nil(nil顺便说一句,你可以比较一下空检查) - 文本框总是包含一些文本,即使它是空的.所以第一个分离总是正确的,并且框总是会出现.

  • 并且NSString的实例永远不会等于NSNull的单例实例. (2认同)

Uff*_*ffo 0

找到解决方案了!![txtName.text isEqualToString:@""]

- (IBAction)doSomething
{
if (![txtName.text isEqualToString:@""]){
    NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@", txtName.text];
    [lblMessage setText:msg];    

}

}
Run Code Online (Sandbox Code Playgroud)