iOS无法检查对象是否为空

时间:2011-11-27 21:30:31

标签: 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];
}

}

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

最诚挚的问候,

6 个答案:

答案 0 :(得分:11)

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

您可以将if条件更正为

if (txtName.text != nil && txtName.text.length != 0 )

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

if (txtName.text.length != 0 )

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

答案 1 :(得分:6)

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

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

txtName.text永远不会nil(顺便说一句,您可以与nil进行空检查比较) - 文本框始终包含部分文本,即使它是空的。所以第一个分离总是正确的,并且框总是会出现。

答案 2 :(得分:3)

我遇到了和你一样的问题。这个问题与NSNull类有关。这是我检查对象的代码为空。

    NSString* text;
    if([text isKindOfClass:[NSNull class]])
    {
           //do something here if that object is null
    }

希望这可以提供帮助。

答案 3 :(得分:1)

#define SAFESTRING(str) ISVALIDSTRING(str) ? str : @""
#define ISVALIDSTRING(str) (str != nil && [str isKindOfClass:[NSNull class]] == NO)
#define VALIDSTRING_PREDICATE [NSPredicate predicateWithBlock:^(id evaluatedObject, NSDictionary *bindings) {return (BOOL)ISVALIDSTRING(evaluatedObject);}]
SAFESTRING(PASS_OBJECT OR STRING);

答案 4 :(得分:0)

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

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

}

}

答案 5 :(得分:0)

请试试这个:

myObj 的值 nil &lt;空&GT;

if([myObj isEqual:[NSNull class]] || !myObj) {

// your code

}