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