【问题标题】:case insensitive NSPredicate with single result in CoreData不区分大小写的 NSPredicate,在 CoreData 中具有单个结果
【发布时间】:2011-11-24 16:18:57
【问题描述】:

这是我当前的 NSPredicate:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode];

我怎样才能不区分大小写?

而且我不想做任何部分匹配。

例如,如果他们为 aUPCCode 输入 123,我不想得到 123、123a、123b、123c 等。我只想要一个完全匹配。

我想过这样做,但似乎有点荒谬:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode,[ aUPCCode lowercaseString] ,[aUPCCode lowercaseString], [aUPCCode uppercaseString],[aUPCCode uppercaseString]];

【问题讨论】:

  • 澄清:你说,“如果他们为 aUPCCode 输入 123,我不想得到 123……”这没有任何意义。是不是笔误。此外,您似乎暗示您当前的预测是“贪婪”测试,匹配任何以123 开头的值。是这样吗?
  • 你使用的是什么类型的持久化存储?

标签: ios core-data nspredicate


【解决方案1】:

正如 Dave DeLong 所说,您可以使用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC ==[c] %@ OR ItemID ==[c] %@", aUPCCode,aUPCCode];

编辑

使用==[c] 而不是==[cd],否则你也会得到重音符号(abcd == àbcd)。

【讨论】:

    【解决方案2】:

    正如 Sinetris 所说,上述在 Objective-C 中有效。

    它适用于不区分大小写的情况。获取其中包含“示例”字符串值的所有结果。

    更新 Swift 4.0/5.0

    let predicateIsNumber = NSPredicate(format: "keywordContactNo contains[c] %@", example!) 
    

    希望对你有帮助

    谢谢

    【讨论】:

    • 帮了大忙,谢谢
    【解决方案3】:

    也许是这样的:

    [NSPredicate predicateWithFormat:@"UPC MATCHES[cd] %@ OR ItemID MATCHES[cd] %@",aUPCCode,aUPCCode];
    

    【讨论】:

    • MATCHES 是不必要的添加。你可以做UPC ==[cd] %@...
    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 2019-02-06
    • 2013-06-14
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多