NSPredicate测试NULL和空字符串

Doz*_*Doz 73 objective-c nspredicate ios

我有一个NSArray并且需要过滤掉任何null的字符串,或者更确切地说,有''(空字符串).我怎么做?我试过做:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"(name!=nil)"]; 
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.或许它确实如此,但有不同种类的空...

Dav*_*ong 145

如果您不使用Core Data,您可以:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name.length > 0"];
Run Code Online (Sandbox Code Playgroud)

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

  • !**注意CoreData**不支持长度,更糟糕的是无法以静默方式返回奇怪的结果.CoreData将谓词`name.length> 1`转换为`name> 1`中的sqlite ...虽然它应该是`length(name)> 1 (78认同)
  • 今天被CoreData再次欺骗了......该死的.有点好笑,我发现自己以前的评论寻找这个:) (25认同)
  • @VincentG - 那么CoreData的解决方案是什么? (7认同)
  • 这是非常危险的。@VincentG 是对的。我有一个带有前导“/”字符的字符串,它不适用于“.length”。我不得不使用`name!=nil AND name!=''` 就像@josema.vitaminew 发布的一样 (2认同)

jos*_*new 74

我认为这应该有效:

NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=nil AND name!=''"]; 
Run Code Online (Sandbox Code Playgroud)

  • 这也适用于Realm数据库谓词.谢谢. (3认同)

小智 12

 NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=NULL"];
Run Code Online (Sandbox Code Playgroud)


Jos*_* B. 7

这个谓词对我有用:

[NSPredicate predicateWithFormat:@"(%K== nil) OR %K.length == 0", @"imageUrl", @"imageUrl"]
Run Code Online (Sandbox Code Playgroud)