ios - 具有动态键和值的 NSPredicate

标签 ios core-data filter nspredicate

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

这是我的代码:

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 时,它看起来像这样

"key" == "value"

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

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

最佳答案

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

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

来自Predicate Format String Syntax documentation :

  • %@ is a var arg substitution for an object value—often a string, number, or date.
  • %K is a var arg substitution for a key path.

关于ios - 具有动态键和值的 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21387925/

相关文章:

ios - 创建 Siri 快捷方式后在 Siri 中推荐快捷方式 - React Native

iphone - iOS 6 上的 Cocos2D 2.0 截图

ios - NSSortDescriptor 按最后一条消息时间戳对对话进行排序

ios - iCloud 和 Core Data 预填充数据库

javascript - vue删除表中重复的循环

ios - UISearchDisplayController 不会触发 didSelectRowAtIndexPath

ios - 具有存储枚举的条件枚举开关

objective-c - 尝试通过核心数据保存文档窗口尺寸

javascript - JavaScript 的 FilterWithKeys?

javascript - 未提供过滤器时 Angular 显示全部