NSPredicate测试NULL和空白字符串


73

我有一个NSArray,需要过滤掉所有为null或具有''(空字符串)的字符串。我怎么做?我试着做:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"(name!=nil)"]; 

但这似乎不起作用。也许确实如此,但是有不同类型的null ...

Answers:


150

如果您不使用核心数据,则可以执行以下操作:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name.length > 0"];

如果字符串为空,则将失败(因为0 == 0)。同样,如果namenil,它也会失败,因为[nil length] == 0


那么解决方案的伴侣是什么?实际上,这似乎对我有用,但第一个答案不起作用。如果字符串为空,那么长度= 0?它不为空
Doz

84
!!! 当心不支持CoreData的长度,更糟糕的是,在无提示返回奇怪结果时将失败。CoreData将谓词转换name.length > 1为sqlite in name > 1...虽然应该如此length(name) > 1
Vincent Guerci 2012年

31
今天又被CoreData欺骗了……该死。有点

8
@VincentG-那么CoreData的解决方案是什么?
RyanJM 2014年

2
这是非常危险的。@VincentG是正确的。我有一个前导'/'字符的字符串,不适用于.length。我不得不使用name!=nil AND name!=''@ josema.vitaminew这样的帖子
Stefan Arn


12
 NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=NULL"];

7

这个谓词为我工作:

[NSPredicate predicateWithFormat:@"(%K== nil) OR %K.length == 0", @"imageUrl", @"imageUrl"]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.