swift - 如何通过 lastModifiedUserRecordID 查询 CloudKit?

标签 swift cloudkit

根据 Apple 文档,lastModifiedUserRecordID 是一个在 iCloud 上自动生成的系统字段。

我想从我最后修改的公共(public) iCloud 数据库中获取记录。

我在 CloudKit 仪表板上将“modifiedBy”设置为 Queryable 并添加了这个谓词:

let userId = CKRecord.Reference(recordID: userCKRecordID, action: .none)
lastModifiedPred = NSPredicate(format: "lastModifiedUserRecordID = %@", userId)

它没有返回任何结果。如果我删除此谓词,它会返回 1 个结果,并且我可以在仪表板中看到最后修改的记录 ID (recordName) 与我发送给它的用户 recordName 匹配。

奇怪的是,使用“creatorUserRecordID”并传递与上面相同的值确实会返回正确的结果,但我需要 lastModifiedBy。

编辑:根据建议,我尝试使用实际的 userCKRecord.recordName 作为字符串并将此谓词发送到 CloudKit。

lastModifiedPred = NSPredicate(format: "lastModifiedUserRecordID = %@", userCKRecord.recordName)

并收到此错误:

"Field \'___modifiedBy\' has a value type of REFERENCE and cannot be queried using filter value type STRING"

正如我上面提到的,我可以使用顶部的原始谓词(使用 CKRecord.ID)很好地查询 creatorUserRecordID,但它不适用于 lastModifiedUserRecordID。

最佳答案

由于您要获取您最后一次修改的记录,因此您必须首先获取您的 UserRecordID。这是通过调用

fetchUserRecordID(completionHandler: { (myUserRecordID, error) in
… // see below
}  

参见 the docs .这样,您就可以得到您的用户 myUserRecordID
有了这个,你可以设置你的查询谓词:

let lastModifiedPred = NSPredicate(format: "lastModifiedUserRecordID = %@", myUserRecordID)  

并执行您的查询。

关于swift - 如何通过 lastModifiedUserRecordID 查询 CloudKit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815854/

相关文章:

iOS、CloudKit - 我的应用程序启动时是否需要进行提取?

ios - 使用 Swift 发送电子邮件

swift - 使用 rxSwift 绑定(bind)数据时内存泄漏

ios - 如何使用 Collection View 按钮快速选择 View Controller

ios - 从多个 CloudKit 记录创建 MapKit Circle 覆盖

core-data - 使用公共(public) CloudKit 数据库 (NSPersistentCloudkitContainer) - macOS

ios - 来自私有(private)区域的 CKQuery 仅返回 CloudKit 中的前 100 个 CKRecords

ios - CloudKit 返回太多记录

swift - UIPickerView 等待 didSelect 直到滚动动画完成

objective-c - 带有纬度和经度的 swift 中的 CLLocation 对象