簡體   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