IOS/Objective-C:排除空值

IOS/Objective-C: Exclude empty values

提问人:user6631314 提问时间:6/20/2018 更新时间:6/21/2018 访问量:53

问:

我以为我已经看到了未在对象中设置的属性的所有可能的值,但显然我没有。

基本上,我想排除尚未为 .事实上,我想排除所有情况,除非有 4 个字符或更多字符的有效字符串。NSManagedObject

我使用的是以下代码:

if (![contact.pic isKindOfClass:[NSNull class]]&&contact.pic.length>4) {
           //I have a valid string
        }
        else {
            //I don't have valid string
        }

但是,它不会排除某些值(很可能是从未设置过值的地方),其中将值记录到控制台,如下所示:

NSLog(@"contact.pic is: %@",contact.pic); //logs (null)

任何人都可以建议防弹代码来排除除大于四个字符的有效字符串之外的所有字符串?

提前感谢您的任何建议

IOS Objective-C

评论

0赞 rmaddy 6/21/2018
你是说你有一个案例,显示和相同的值最终出现在你的代码中?NSLog(null)// I have a valid string

答:

0赞 George Green 6/21/2018 #1

看起来您没有捕捉到值为零的情况,您是否也尝试过为此包含捕获

if (contact.pic && ![contact.pic isKindOfClass:[NSNull class]] && contact.pic.length >= 4) {
    //I have a valid string
}
else {
    //I don't have valid string
}

请注意,我也做了你的不等式,而不是因为你的问题表明这是一个有效的值。>=>4

评论

3赞 rmaddy 6/21/2018
如果您要添加检查以查看是否是,请将其作为第一个检查。但这不是必需的。如果是,则对 的检查将为 false,并使该部分为 true。因此,将检查长度。但是长度将是 if is 和 is 不是,所以整个事情都是错误的。contact.picnilnilNSNull!0contact.picnil0> 4
0赞 iphonic 6/21/2018 #2

我通常在每个项目中根据需要使用以下三个宏进行验证NSString

#define IfNULL(original, replacement) IsNULL(original) ? replacement : original

#define IsNULL(original) original == (id)[NSNull null] || original == nil

#define IsEmpty(value) (value == (value == nil) || (id)[NSNull null] || ([value isKindOfClass:[NSString class]] && ([value isEqualToString:@""] || [value isEqualToString:@"<null>"] || [value isEqualToString:@"(null)"] || [value isEqualToString:@" "]))) ? YES : NO

用法

if(!isEmpty(contact.pic)){
    //Do your stuff
}

评论

0赞 rmaddy 6/21/2018
为什么不比较第一?nil
0赞 iphonic 6/21/2018
是的,nil 应该是第一个