gpt4 book ai didi

swift - 如何在不成为父所有者的情况下在 Cloudkit 中创建新的共享记录?

转载 作者:行者123 更新时间:2023-11-28 05:36:29 30 4
gpt4 key购买 nike

我正在开发一个基本上类似于共享购物 list 的应用程序。我愿意使用 Cloudkit。

单独共享每个购物 list 项目没有意义,因此我们的想法是在列表级别创建共享。这样,列表中的所有项目都是共享的,如解释的那样 here

我已经成功地实现了这个想法。基本上,列表的所有者可以创建项目,每次创建项目时,已同意与所有者共享列表的用户可以在 Shared Database 中看到新项目。我还检查过,当用户修改他们的 Shared Database 中的现有记录时,修改会反射(reflect)在所有者的 Private Database 中。

现在的问题是,不是列表所有者的人可能想要创建一个新项目。基本上,如果 2 个人共享一个购物 list ,他们都应该能够在 list 上添加新的东西来购买!这在 Cloudkit 上似乎是不可能的。换句话说,似乎只有 parent 记录的所有者才能创建子记录。有没有人为这种用例找到解决方案?

最佳答案

我在调查更多之后回答我自己的问题。

如果不是所有者,似乎无法在 Cloudkit 控制台中创建共享记录,但可以通过 Swift 实现。

这是一个代码示例:

      let sharedDatabase = CKContainer.default().sharedCloudDatabase
sharedDatabase.fetchAllRecordZones { (recordZone, error) in
let myZoneID = recordZone![0].zoneID//Temporary hack
let query = CKQuery(recordType: "parentRecordType", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
sharedDatabase.perform(query, inZoneWith: myZoneID) { (records, error) in
print(records)
let newID = CKRecord.ID(zoneID: myZoneID)
let nameRecord = CKRecord(recordType: "childRecordType", recordID: newID)
nameRecord.setValue("Created by someone who is not the owner", forKey: "title")
nameRecord.parent = CKRecord.Reference(record:records![0], action: .none)


CKContainer.default().sharedCloudDatabase.save(nameRecord) { (savedRecord: CKRecord?, error: Error?) -> Void in
print(error)

}
}
}

关于swift - 如何在不成为父所有者的情况下在 Cloudkit 中创建新的共享记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58486604/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com