带有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)
这对我有效