基于Apple文档,lastModifiedUserRecordID是在iCloud上自动生成的系统字段。
我想从我最近修改的公共iCloud数据库中获取记录。
我在CloudKit仪表板上将“ modifiedBy”设置为可查询,并添加了以下谓词:
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)
并收到此错误:
“字段\'___ modifiedBy \'的值类型为REFERENCE,不能为 使用过滤器值类型“ STRING”查询的
如上所述,我可以使用顶部的原始谓词(使用CKRecord.ID)很好地查询creatorUserRecordID,但不适用于lastModifiedUserRecordID。
答案 0 :(得分:1)
由于要获取您上次修改的记录,因此必须首先获取UserRecordID
。通过调用
fetchUserRecordID(completionHandler: { (myUserRecordID, error) in
… // see below
}
请参见the docs。这样,您就可以吸引用户myUserRecordID
。
这样,您可以设置查询谓词:
let lastModifiedPred = NSPredicate(format: "lastModifiedUserRecordID = %@", myUserRecordID)
并执行查询。
答案 1 :(得分:0)
您正在使用NSPredicate
比较字符串文字。其中,userId不是字符串文字。使用这个。
lastModifiedPred = NSPredicate(format: "lastModifiedUserRecordID = %d", INT-VALUE-OF-userId)
答案 2 :(得分:0)
基于https://developer.apple.com/documentation/cloudkit/ckrecord/id上的Apple文档
CKRecord.ID->类ID:NSObject
记录ID对象由名称字符串和区域ID组成。名字 字符串是长度不超过255个字符的ASCII字符串。
比较对象和字符串不会给您结果,请尝试将CKRecord.ID转换为String可能会帮助