【问题标题】:NSPredicate with dynamic key and value具有动态键和值的 NSPredicate
【发布时间】:2014-02-18 17:00:25
【问题描述】:

我正在尝试创建一个函数来搜索我的核心数据堆栈并返回所需键/值的消息量。

这是我的代码:

NSFetchRequest      *messagesCountRequest = [NSFetchRequest fetchRequestWithEntityName:@"Message"];
NSEntityDescription *messageCountModel    = [NSEntityDescription entityForName:@"Message" inManagedObjectContext:_mainManagedObjectContext];

[messagesCountRequest setEntity:messageCountModel];

NSPredicate *messageCountPredicate = [NSPredicate predicateWithFormat:@"%@ == %@", key, value];

[messagesCountRequest setPredicate:messageCountPredicate];

count = (int)[_mainManagedObjectContext countForFetchRequest:messagesCountRequest error:nil];

问题是它每次都返回 0。我已经找到了问题的根源。当有一个静态键时,谓词看起来像这样。

key == "value"

当我通过动态键时,它看起来像这样

"key" == "value"

所以问题似乎是通过将 NSString 传递给谓词放置的键周围的第一组双引号。我该如何解决这个问题?

编辑:为了清楚起见,我需要它像第一种情况一样,这是可行的。

【问题讨论】:

    标签: ios core-data filter nspredicate


    【解决方案1】:

    要替换谓​​词字符串中的,您必须使用%K,而不是%@

    [NSPredicate predicateWithFormat:@"%K == %@", key, value];
    

    来自Predicate Format String Syntax documentation

    • %@ 是一个 var arg 替代对象值(通常是字符串、数字或日期)。
    • %K 是键路径的 var arg 替换。

    【讨论】:

    • +1 我从来不知道这一点,它实际上解决了我前几天试图做到这一点的问题。谢谢:D
    【解决方案2】:
     let predicate = NSPredicate(format: "SELF[%@] CONTAINS %@",key,value)
    

    这对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 2015-04-19
      • 1970-01-01
      相关资源
      最近更新 更多