【问题标题】:How to query CloudKit by lastModifiedUserRecordID?如何通过 lastModifiedUserRecordID 查询 CloudKit?
【发布时间】:2019-11-10 22:34:23
【问题描述】:

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

我想从公共 iCloud 数据库中获取我上次修改的记录。

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

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

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

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

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

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

并收到此错误:

"字段\'___modifiedBy\'的值类型为REFERENCE,不能为 使用过滤值类型 STRING 查询”

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

【问题讨论】:

    标签: swift cloudkit


    【解决方案1】:

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

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

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

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

    并执行您的查询。

    【讨论】:

    • 这行得通。我发誓我试过这个并且得到一个错误,我需要一个 REFERENCE 类型(而不是像你现在做的那样给它一个 CKRecord.ID),这导致我在我的操作中走上了这条路,但我只是重新尝试了这个和它工作。谢谢!
    • 很高兴能帮上忙!
    【解决方案2】:

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

    CKRecord.ID -> 类 ID:NSObject

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

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

    【讨论】:

    • 我决定试试这个并收到此错误:“字段 \'___modifiedBy\' 的值类型为 REFERENCE,无法使用过滤值类型 STRING 进行查询”
    【解决方案3】:

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

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

    【讨论】:

    • 我不确定这是否可行,userId 值类似于 GUID,因此无法转换为 Int。
    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多