所以我有以下代码:
- (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
,我做错了什么?我只是在用户在框中输入内容时才会显示一些文字。
最诚挚的问候,
答案 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
}