菜鸟教程小白 发表于 2022-12-11 18:22:33

ios - 如何合并来自多个 CloudKit 表的数据?


                                            <p><p>我正在寻找一种将数据从多个 CloudKit 表加载到一个对象中的方法。
现在我正在从一个 CloudKit 表(recordType)加载数据,但是如何在下面的函数中组合这些数据?我需要添加连接到 Clients 表的事件表。所以一个客户可以有多个事件。</p>

<p>我的客户模型:</p>

<pre><code>class Client: NSObject {
var recordID: CKRecordID!
var name: String?
var activities: ?
var image: UIImage?
var email: String?
var phone: String?
var rate: Int?
}
</code></pre>

<p>我的事件对象:</p>

<pre><code>class Activity: NSData {
var name: String?
var date: Date?
}
</code></pre>

<p>仅加载客户端的功能:</p>

<pre><code>private func loadClients() {
    let pred = NSPredicate(value: true)
    let sort = NSSortDescriptor(key: &#34;Name&#34;, ascending: true)
    let query = CKQuery(recordType: &#34;Clients&#34;, predicate: pred)
    query.sortDescriptors =

    let operation = CKQueryOperation(query: query)

    var newClients = ()

    operation.recordFetchedBlock = { record in
      let client = Client()
      client.recordID = record.recordID
      client.name = record[&#34;Name&#34;] as? String
      client.email = record[&#34;Email&#34;] as? String
      client.phone = record[&#34;Phone&#34;] as? String
      client.rate = record[&#34;Rate&#34;] as? Int

      newClients.append(client)
    }

    operation.queryCompletionBlock = { (cursor, error) in
      DispatchQueue.main.async {
      if error == nil {
          ViewController.isDirty = false
          self.clients = newClients

          if self.clients.count == 0 {
            self.messageLabel.text = &#34;No values in the database&#34;
          } else {
            self.tableView.reloadData()
          }

          self.updateView()
      } else {
          self.messageLabel.text = &#34;Error loading data&#34;
          print(&#34;ERROR: \(error!.localizedDescription)&#34;)
          self.updateView()
      }
      }
    }

    CKContainer.default().privateCloudDatabase.add(operation)
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>据我了解,您想使用一个请求将 <code>Client</code> 与 <code>Activity</code> 数组一起加载。 </p>

<p>我认为使用 <code>CloudKit</code> 是不可能的。
但是你可以在收到<code>Client</code>记录后加载<code>Activity</code>:</p>

<pre><code>    if let activitiesIDs = clientRecord[&#34;activities&#34;] as? {
      let operation = CKFetchRecordsOperation(recordIDs: activitiesIDs)
      operation.fetchRecordsCompletionBlock = { (records, error) in

      }

      let database = CKContainer.default().publicCloudDatabase
      database.add(operation)
    }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何合并来自多个 CloudKit 表的数据?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41249475/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41249475/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何合并来自多个 CloudKit 表的数据?