• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:22:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

我的客户模型:

class Client: NSObject {
  var recordID: CKRecordID!
  var name: String?
  var activities: [Activity]?
  var image: UIImage?
  var email: String?
  var phone: String?
  var rate: Int?
}

我的事件对象:

class Activity: NSData {
  var name: String?
  var date: Date?
}

仅加载客户端的功能:

private func loadClients() {
    let pred = NSPredicate(value: true)
    let sort = NSSortDescriptor(key: "Name", ascending: true)
    let query = CKQuery(recordType: "Clients", predicate: pred)
    query.sortDescriptors = [sort]

    let operation = CKQueryOperation(query: query)

    var newClients = [Client]()

    operation.recordFetchedBlock = { record in
      let client = Client()
      client.recordID = record.recordID
      client.name = record["Name"] as? String
      client.email = record["Email"] as? String
      client.phone = record["hone"] as? String
      client.rate = record["Rate"] as? Int

      newClients.append(client)
    }

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

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

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

    CKContainer.default().privateCloudDatabase.add(operation)
 }



Best Answer-推荐答案


据我了解,您想使用一个请求将 ClientActivity 数组一起加载。

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

    if let activitiesIDs = clientRecord["activities"] as? [CKRecordID] {
        let operation = CKFetchRecordsOperation(recordIDs: activitiesIDs)
        operation.fetchRecordsCompletionBlock = { (records, error) in

        }

        let database = CKContainer.default().publicCloudDatabase
        database.add(operation)
    }

关于ios - 如何合并来自多个 CloudKit 表的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41249475/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap