1

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

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

我已经成功地实现了这个想法。基本上,列表的所有者可以创建项目,并且每次创建项目时,已接受与所有者共享列表的用户都可以在Shared Database. 我还检查了当用户修改他们的现有记录时Shared Database,修改会反映在所有者的Private Database.

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

4

1 回答 1

1

在进行更多调查后,我正在回答我自己的问题。

似乎不可能在没有所有者的情况下在 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)

                }
            }
         }
于 2019-10-22T03:52:52.130 回答