5

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

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

4

1 回答 1

14

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

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

(请参阅“谓词编程指南”中的解析器基础知识。)

于 2013-01-17T18:01:18.433 回答