iOS可以';t检查对象是否为空
因此,我有以下代码:iOS可以';t检查对象是否为空,ios,ios5,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]; } } txtName是一个UITextField,我做错
- (IBAction)doSomething
{
if (txtName.text != (id)[NSNull null] || txtName.text.length != 0 ) {
NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@", txtName.text];
[lblMessage setText:msg];
}
}
txtName
是一个UITextField
,我做错了什么?我试图只在用户在框中键入内容时显示一些文本
致以最诚挚的问候,如果(txtName.text!=(id)[NSNull null]| | txtName.text.length!=0){
将其理解为“如果文本为空或长度不是0”
txtName.text
从来都不是nil
(顺便说一句,您可以将nil
与之进行比较以进行空检查)-文本框始终包含一些文本,即使它是空的。因此,第一个分隔符始终为true,并且该框将始终显示。文本字段中的文本是NSString
实例或nil
值,它永远不等于NSNull
类的实例(与nil不同)。因此,由于第一次比较始终为真,则整个if条件的计算结果为真,并显示消息
您可以将您的if条件更正为
if (txtName.text != nil && txtName.text.length != 0 )
或者,由于向nil发送长度消息将返回0,所以只需
if (txtName.text.length != 0 )
虽然我通常使用第一个选项进行两次比较找到的解决方案!
![txtName.text IsequalString:@”“]
我和你们一样也遇到了同样的问题。这个问题与NSNull类有关。这是我检查对象是否为null的代码
NSString* text;
if([text isKindOfClass:[NSNull class]])
{
//do something here if that object is null
}
希望这能有所帮助。请尝试以下方法:
#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);
myObj的值为nil或if([myObj isEqual:[NSNull class]] || !myObj) {
// your code
}
NSString的实例永远不等于NSNull的单例实例。你确定你编译了更改吗?@Uffo,很抱歉我犯了愚蠢的错误-你必须在if条件下使用&,而不是| |。应该是
[NSNull]
if([myObj isEqual:[NSNull class]] || !myObj) {
// your code
}