2011-11-27 61 views
6

所以我有以下代码:的iOS无法检查对象为空

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

} 

txtNameUITextField,我在做什么错?我试图仅在用户在框中键入内容时才显示一些文本。

最好的问候,

回答

0

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

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

} 

} 
6

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

它读作 “如果该文本为null或长度不为0”

txtName.text从不nil(你可以比较反对nil为空检查,顺便说一句) - 文本框始终保持一些文本,即使它是空的。所以第一个分离符总是如此,并且盒子总是会出现。

+2

而NSString的实例是永远不会等于单个实例NSNull。 – 2011-11-27 21:35:29

+0

那么有没有办法实现这个...或? http://screencast.com/t/XJ9AZm7Cs – Uffo

11

文本在文本字段是NSString实例或nil值,它永远不会等于NSNull类的实例(其为不一样的零)。因此,第一次比较总是如此,那么整个if条件评估为真,并且出现消息。

你可以纠正你,如果条件

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

,或者如发送长度信息到零将返回0反正只是

if (txtName.text.length != 0) 

虽然我通常2个比较使用的第一个选项

+0

仍然不工作:看这里http://screencast.com/t/XJ9AZm7Cs,任何解决方案? – Uffo

+0

您确定编译了更改吗? – Eiko

+0

嗯,是的,我编译:(但仍然不工作... – Uffo

3

我得到了和你一样的问题。这个问题涉及到NSNull类。这里是我的代码来检查对象是空的。

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

希望这可以提供帮助。

+0

应该是[[NSNull null] – runmad

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); 
0

请试试这个:

MyObj中的价值是<空>

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

// your code 

}