将 NSPredicate/NSCompoundPredicate 与 Where 子句或可选返回一起使用,CloudKit
Posted
技术标签:
【中文标题】将 NSPredicate/NSCompoundPredicate 与 Where 子句或可选返回一起使用,CloudKit【英文标题】:Using NSPredicate/NSCompoundPredicate with Where clause or Optional Return, CloudKit 【发布时间】:2015-12-28 22:42:05 【问题描述】:不确定主题行是否有意义,我有一个 NSCompoundPredicate
,它工作得很好,它会在 24 小时内查询日期,如果记录被“阻止”,并且也只返回我的自定义“类型”的记录。
我所说的自定义类型的意思是值可以是 1、2 或 3。所以我希望我的查询返回类型 2 和 3 的值,这很有效。但是,对于有 3 的花哨部分,云套件数据库中的“用户名”值下也会有一个字符串值。在类型 2 下,用户名将为空。
所以我想返回所有用户名为“Smith”的类型 3,然后还返回所有类型 2,根本没有用户名。我在获取用户名为 smith 的类型 2 和 3 时遇到问题,我拥有它的方式只返回名称为 smith 的用户,而不返回任何类型 2。需要一种让 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】:首先,customTypes
不是谓词,因此您发布的代码应该会崩溃。您需要构建一个考虑到自定义类型 2 和 3 之间差异的谓词。
NSPredicate(format:
"(customType = 2 && userName contains %@) || (customType = 3)", "Smith")
【讨论】:
谢谢你会尝试,我在粘贴代码时错过了编写谓词。 let customType = NSPredicate(format: "UserName IN %d", argumentArray: [customTypes]) 这似乎也是错误的。将用户名和自定义类型混为一谈。只需使用我提供的谓词即可。 其实,刚试了一下,以为可行,返回错误,“不是谓词比较” 我读到使用云套件不能使用复合词和或谓词。以上是关于将 NSPredicate/NSCompoundPredicate 与 Where 子句或可选返回一起使用,CloudKit的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等