关于NSPredicate的简单问题。我正在尝试用“传入”值构造我的谓词,如下所示:
NSPredicate* currentPredicate = [NSPredicate predicateWithFormat:@"%@ == %@",key,[changesDict valueForKey:@"Id"] ];
但是,我无法让它正常工作。如果我插入实际值,我通过它确实工作。所以这有效:
NSPredicate* currentPredicate = [NSPredicate predicateWithFormat:@"contactId == %@",[changesDict valueForKey:@"Id"] ];
(注意我插入了contactId,而不是前一个用同名传递字符串的例子)
要解决我NSLogged两个谓词看他们的描述,他们是不同的。我会在下面给他们看。
这是工作
2013-01-17 10:29:25.513 TestingCoreData[1776:3b03] contactId == "5878"
这是非工作
2013-01-17 10:29:25.513 TestingCoreData[1776:3b03] "contactId" == "5878"
所以我可以看到它正在插入一个字符串,我真的只想要我稍后将在获取请求中使用的属性的名称。但有没有办法通过传递值来实现这一目标?
答案 0 :(得分:14)
对于密钥或密钥路径,您必须使用%K
格式:
[NSPredicate predicateWithFormat:@"%K == %@", key, [changesDict valueForKey:@"Id"]];
(参见“谓词编程指南”中的Parser Basics。)