繁体   English   中英

如何通过lastModifiedUserRecordID查询CloudKit?

[英]How to query CloudKit by lastModifiedUserRecordID?

基于Apple文档,lastModifiedUserRecordID是在iCloud上自动生成的系统字段。

我想从公共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 \\'的值类型为REFERENCE,无法使用过滤器值类型STRING查询”

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

由于您要获取上次修改过的记录,因此必须首先获取UserRecordID 这是通过调用完成的

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

文档 这样,您就可以获得用户myUserRecordID
有了这个,您可以设置您的查询谓词:

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

并执行您的查询。

您正在使用NSPredicate来比较字符串文字。 userId不是字符串文字。 用这个。

lastModifiedPred = NSPredicate(format: "lastModifiedUserRecordID = %d", INT-VALUE-OF-userId)

基于https://developer.apple.com/documentation/cloudkit/ckrecord/id上的Apple文档

CKRecord.ID - >类ID:NSObject

记录ID对象由名称字符串和区域ID组成。 name字符串是一个长度不超过255个字符的ASCII字符串。

比较一个对象和字符串不会给你结果,尝试将CKRecord.ID强制转换为String也许有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM