带有dynamic密钥和值的NSPredicate

我试图创build一个函数,通过我的核心数据堆栈进行search,并返回所需的键/值的消息量。

这是我的代码:

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。 我find了问题的根源。 当有一个静态键时,谓词看起来像这样。

 key == "value" 

当我通过dynamic密钥时,它看起来像这样

 "key" == "value" 

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

编辑:为了清楚起见,我需要它是像第一个案件,那是工作。

要replace谓词string中的 ,您必须使用%K ,而不是%@

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

从谓词格式string语法文档 :

  • %@是对象值的var argreplace – 通常是string,数字或date。
  • %K是关键path的var argreplace。
  let predicate = NSPredicate(format: "SELF[%@] CONTAINS %@",key,value) 

这对我有效