作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个基本上类似于共享购物 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/
我是一名优秀的程序员,十分优秀!