我已经写了下面的谓词,但是它崩溃了应用程序,原因是'Unable to parse the format string "(rootActivityId IN 12,13 AND (activityType == 3 OR activityType == 2)) OR (activityId IN 12,13 AND (activityType == 3 OR activityType == 2))"'

let activityTypeClause = "(activityType == \(NSNumber(integer: ActivityType.TypeTwo)) OR activityType == \(NSNumber(integer: ActivityType.TypeOne)))"
fetchRequest.predicate = NSPredicate(format: "(rootActivityId IN \(activityIds) AND \(activityTypeClause)) OR (activityId IN \(activityIds) AND \(activityTypeClause))")

// activityIds contains coma separated string

我不知道我做错了什么。

最佳答案

从中的文档:
与SQL IN操作等效,左侧必须出现在
右边指定的集合。例如,name IN
{'本','梅丽莎','尼克'}。集合可以是数组、集合,
或者字典,如果是字典,则使用其值。
这表明逗号分隔的字符串实际上应该是一个集合对象。我不清楚它是否需要一个Swift的NS风格的集合。
不评论它是否作为谓词工作,但以下内容不会给出解析错误:

let rootActivityId = "12"
let activityIds = ["12", "13"]

let pred = NSPredicate(format: "rootActivityId IN %@", argumentArray: [activityIds])

关于swift - NSPredicate:无法解析格式字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36771074/

10-11 19:46