【问题标题】:NSPredicate to test for NULL, and blank stringsNSPredicate 用于测试 NULL 和空白字符串
【发布时间】:2011-11-14 05:24:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios objective-c nspredicate


    【解决方案1】:

    如果你不使用 Core Data,你可以这样做:

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

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

    【讨论】:

    • 那么解决方案是什么?这个实际上似乎对我有用,而第一个答案却没有。如果字符串为空,那么不会长度 = 0?它不为空
    • !!! 小心 CoreData 长度不受支持,更糟糕的是会默默地返回奇怪的结果。 CoreData 将谓词name.length > 1 转换为name > 1 中的sqlite ...虽然它应该是length(name) > 1
    • 今天又被这个CoreData骗了……该死。有点有趣,我发现我自己以前的评论正在寻找这个:)
    • @VincentG - 那么CoreData的解决方案是什么?
    • 这很危险。 @VincentG 是对的。我有一个带有前导“/”字符的字符串,它不适用于.length。我不得不使用 name!=nil AND name!='' 像 @josema.vitaminew 发布
    【解决方案2】:

    我认为这应该可行:

    NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=nil AND name!=''"]; 
    

    【讨论】:

    • 这也适用于 Realm 数据库谓词。谢谢。
    【解决方案3】:

    这个谓词对我有用:

    [NSPredicate predicateWithFormat:@"(%K== nil) OR %K.length == 0", @"imageUrl", @"imageUrl"]
    

    【讨论】:

      【解决方案4】:
       NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=NULL"];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-21
        • 1970-01-01
        • 2012-04-03
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多