2010-04-15 48 views
3

我试图设置一个谓词的获取请求,以获得其商品的标识符属性与谓词中指定的标识符数组匹配的商店中的记录,例如核心数据提取请求与数组

NSString *predicateString = [NSString stringWithFormat:@"identifier IN %@", employeeIDsArray]; 

employeeIDsArray包含许多与商店中的ID匹配的NSNumber对象。但是,我收到错误“无法解析格式字符串”。如果用于过滤数组,则这种类型的谓词有效,但如前所述,对于核心数据提取失败。我应该如何设置谓词?

回答

10

NSPredicate不使用像NSString那样的格式。因此,使用预生成的谓词字符串创建谓词的结果将不是有效的谓词。

你必须使它的实际断言:

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"identifier IN %@", employeeIDsArray]; 
[fetchRequest setPredicate:predicate]; 

的谓词格式的详细信息,请参阅the documentation

+0

谢谢,但我当然会调用:NSPredicate * predicate = [NSPredicate predicateWithFormat:predicateString]; – RunLoop 2010-04-15 17:35:55

+0

不接受你的答案的道歉。我已经尝试过你的建议,它的工作原理。 – RunLoop 2010-04-15 20:53:08

4

当您使用stringWithFormat:该字符串,该方法插入阵列的description其中你有%@(一个描述该数组的内容的字符串)。

这不是你想要的。您不想测试描述数组的字符串中的成员资格;你想测试阵列的会员资格。所以,不要通过stringWithFormat:-直接将格式字符串和数组传递给predicateWithFormat:

+0

谢谢。必须给第一张海报“回答”,但+1,因为感谢你,我现在明白了为什么。 – RunLoop 2010-04-15 20:53:57

+0

+1注意到它为什么不工作!我只是觉得他忘记把他的字符串变成一个谓词。 – 2010-04-15 21:17:46