[英]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.