NSPredicate:无法解析格式字符串

时间:2016-04-21 13:27:17

标签: swift core-data nspredicate

我编写了下面的谓词,但是它崩溃了应用程序,原因是'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

我无法弄清楚我做错了什么。

1 个答案:

答案 0 :(得分:5)

来自IN的文档:

  

等效于SQL IN操作,左侧必须出现在   由右侧指定的集合。例如,名称IN   {'Ben','Melissa','Nick'}。集合可以是数组,集合,   或字典 - 在字典的情况下,使用其值。

这表明逗号分隔的字符串实际上应该是一个集合对象。是否需要成为一个NS风格的Swift系列,我不清楚。

不评论它是否作为谓词工作,但以下内容不会给我一个解析错误:

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

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