NSPredicate predicateWithFormat传递属性名称

hat*_*ike 5 core-data nspredicate ios

关于NSPredicate的简单问题.我正在尝试用"传入"值构造我的谓词,如下所示:

NSPredicate* currentPredicate = [NSPredicate predicateWithFormat:@"%@ == %@",key,[changesDict valueForKey:@"Id"] ];
Run Code Online (Sandbox Code Playgroud)

但是,我无法使其正常工作.如果我插入实际值,我通过它确实工作.这样可行:

NSPredicate* currentPredicate = [NSPredicate predicateWithFormat:@"contactId == %@",[changesDict valueForKey:@"Id"] ];
Run Code Online (Sandbox Code Playgroud)

(注意我插入了contactId,而不是前一个用同名传递字符串的例子)

要解决我的NSLogged两个谓词看他们的描述,他们是不同的.我会在下面给他们看.

这是工作的

2013-01-17 10:29:25.513 TestingCoreData[1776:3b03] contactId == "5878"
Run Code Online (Sandbox Code Playgroud)

这是非工作的

2013-01-17 10:29:25.513 TestingCoreData[1776:3b03] "contactId" == "5878"
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n R 14

对于键路径,您必须使用以下%K格式:

[NSPredicate predicateWithFormat:@"%K == %@", key, [changesDict valueForKey:@"Id"]];
Run Code Online (Sandbox Code Playgroud)

(参见"Predicate Programming Guide"中的Parser Basics.)