0

我有 2 个记录类型:“userDetails”和“request”,其中“request”中的一个字段引用“userDetails”。我想知道我是否从“请求”中获取记录以获取参考字段,然后从参考中获取仅在“userDetails”中可用的其余值,例如用户名,这可能吗?或者有什么方法可以在不进行其他数据获取的情况下实现这一目标?

我试过这个:

CKContainer.default().publicCloudDatabase.fetch(withRecordID: CKRecord.ID(recordName: "0A38D024-C191-436E-8622-AE7527805CE8")) { (fetched, error) in
   if fetched != nil {
      let a = fetched?.value(forKey: "requesterReferenceId") as? CKRecord.Reference
      let b = a?.recordID.value(forKey: "userName") as? String
      print(b!)
  }
}

但出现错误:

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<CKReference 0x600002034280> valueForUndefinedKey:]:此类与键 userName 的键值编码不兼容。”

感谢任何帮助和建议。

4

1 回答 1

1

我假设您保存了这样的参考:

let userDetail = CKRecord(recordType: "UserDetail")
let request = CKRecord(recordType: "Request")
let reference = CKRecord.Reference(recordID: userDetail.recordID, action: .deleteSelf)
request["requesterReferenceId"] = reference as CKRecordValue

您是否尝试过使用获取的引用作为谓词?

let publicDatabase = CKContainer.default().publicCloudDatabase
publicDatabase.fetch(withRecordID: CKRecord.ID(recordName: "0A38D024-C191-436E-8622-AE7527805CE8")) { (fetched, error) in
    if fetched != nil {
        if let reference = fetched?.value(forKey: "requesterReferenceId") as? CKRecord.Reference {
            let predicate = NSPredicate(format: "recordID == %@", reference)
            let query = CKQuery(recordType: "UserDetail", predicate: predicate)
            let queryOperation = CKQueryOperation(query: query)
            queryOperation.desiredKeys = ["list any keys you want to fetch here"]
            queryOperation.recordFetchedBlock = { (record: CKRecord?) -> Void in
                if let record = record {
                    print(record)
                }
                
            }
            
            queryOperation.queryCompletionBlock = { (cursor: CKQueryOperation.Cursor?, error: Error?) -> Void in
                if let error = error {
                    print(error)
                    return
                }
                
            }
            publicDatabase.add(queryOperation)
        }
    }
}
于 2020-11-25T16:40:40.450 回答