NSPredicate predicateWithFormat传递属性名称

时间:2013-01-17 17:46:20

标签: ios core-data nspredicate

关于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"

所以我可以看到它正在插入一个字符串,我真的只想要我稍后将在获取请求中使用的属性的名称。但有没有办法通过传递值来实现这一目标?

1 个答案:

答案 0 :(得分:14)

对于密钥密钥路径,您必须使用%K格式:

[NSPredicate predicateWithFormat:@"%K == %@", key, [changesDict valueForKey:@"Id"]];

(参见“谓词编程指南”中的Parser Basics。)