将 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的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到

python怎么将0写入文件?

如何将CMD窗口背景改成透明?