使用数组的Core Data获取请求

3

我正在尝试使用谓词设置一个获取请求,以获取存储中标识符属性与谓词中指定的标识符数组匹配的记录。

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

employeeIDsArray包含一些NSNumber对象,这些对象与存储中的ID匹配。然而,我得到了一个错误“无法解析格式字符串”。如果用于过滤数组,则此类型的谓词有效,但是如上所述,对于Core Data获取失败。请问我应该如何设置谓词?

2个回答

11

NSPredicate不使用类似NSString的格式。因此,使用预生成的predicateString创建的谓词将不是有效的谓词。

您必须将其转换为实际的谓词:

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

请参阅文档了解谓词格式的更多信息。


谢谢,但我当然会调用:NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString]; - RunLoop
抱歉之前没有接受你的答案。我尝试了你的建议,它有效。 - RunLoop

4
当您使用stringWithFormat:创建该字符串时,该方法将数组的description(描述数组内容的字符串)插入到您放置%@的位置。
这不是您想要的。 您不想在描述数组的字符串中测试成员资格; 您想测试成员资格是否属于数组。 因此,请不要通过stringWithFormat:进行操作 - 直接将格式字符串和数组传递给predicateWithFormat:

谢谢。不得不给第一个回答者“已回答”的标志,但是因为你的帮助,我现在明白了原因,所以还要点个赞。 - RunLoop
+1 感谢您注意到为什么它没有起作用!我只是认为他忘记将字符串转换为谓词。 - Dave DeLong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接