将NSPredicate / NSCompoundPredicate与Where子句或Optional Return,CloudKit一起使用

时间:2015-12-28 22:42:06

标签: swift nspredicate cloudkit

不确定主题行是否有意义,我有一个NSCompoundPredicate效果很好,它在24小时内查询日期,如果记录是"阻止",还有只返回我的自定义"类型"。

的记录

我的意思是自定义类型的值可以是1,2或3.所以我希望我的查询返回类型2和3的那些,这是有效的。但是,对于有3的奇特部分,在"用户名"下面也会有一个字符串值。云套件数据库中的值。在类型2下,用户名将为空白。

所以我想要返回所有类型3的用户名为" Smith"然后所有类型2都没有用户名。我无法同时使用用户名为smith的2型和3型,我拥有它的方式只返回名为smith的用户并且不会返回任何类型2&# 39; S。需要一种方法让UserName谓词是可选的吗?

代码:

let predName = NSPredicate(format: "UserName CONTAINS %@", "Smith")
let customTypes = [2, 3]
let time = 86400
let fromDateDay: Double = (NSDate().timeIntervalSinceReferenceDate - time)
let predDate = NSPredicate(format: "date >= %f", fromDateDay)
let predBlocked = NSPredicate(format: "blocked != %d", 1)
pred = NSCompoundPredicate(andPredicateWithSubpredicates: [customTypes, predDate, predBlocked, predName])

1 个答案:

答案 0 :(得分:1)

首先,customTypes不是谓词,因此您发布的代码应该崩溃。您需要构建一个谓词,该谓词考虑了自定义类型2和3之间的差异。

NSPredicate(format: 
 "(customType = 2 && userName contains %@) || (customType = 3)", "Smith")