SWIFT/CloudKit - 更新记录并将其保存回容器
Posted
技术标签:
【中文标题】SWIFT/CloudKit - 更新记录并将其保存回容器【英文标题】:SWIFT/CloudKit - Updating a record and saving it back to container 【发布时间】:2015-03-22 13:58:48 【问题描述】:我在更新 CloudKit 记录时遇到问题。我想要实现的是允许用户通过单击 tableview 行来为一本书投票的能力。 此表视图当前使用来自云数据的记录填充。 当我想检索一条记录(即选定的 tableview 行)并将其 voteCount 列增加 1,然后将其保存回云端并重新加载 tableview 中的数据时,我被卡住了。
目前我正在通过以下方式检索记录:
booksIncludedInVote = []
let cloudContainer = CKContainer.defaultContainer()
let publicDatabase =CKContainer.defaultContainer().publicCloudDatabase
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Book", predicate: predicate)
let queryOperation = CKQueryOperation(query: query)
queryOperation.desiredKeys = ["name", "author", "image", "description", "voteCount"]
queryOperation.queuePriority = .VeryHigh
queryOperation.resultsLimit = 50
queryOperation.recordFetchedBlock = (record:CKRecord!) -> Void in
if let restaurantRecord = record
self.booksIncludedInVote.append(restaurantRecord)
您能帮我更新特定记录,然后将其发送回云端吗?
【问题讨论】:
【参考方案1】:你还需要这样的代码:
operation.queryCompletionBlock = cursor, error in
self.tableView.ReloadData()
publicDatabase.addOperation(operation)
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)
var record = self.booksIncludedInVote[indexPath.row]
// now increment the voteCount value in that record and save it using
publicDatabase.saveRecord(theRecord, completionHandler: record, error in
【讨论】:
感谢您的输入 Edwin - 我已将代码更新为现在获取并设置当前记录的对象。但是我收到“不允许写入操作”错误。你知道如何解决这个问题吗? 这可能是多方面的。在 CloudKit 仪表板中,您可以为您拥有的每个记录类型设置权限。有一个矩阵,您可以在其中设置 9 种不同的权限。创建、读取、写入世界、认证、创建者。默认情况下,某人只能更改自己的记录。您可能必须将其更改为已验证。 非常好 - 谢谢 Edwin,您的回答有助于我更新记录。 @EdwinVermeer - 您能否建议使用绑定到按钮的操作视图而不是使用表格中的单元格来解决类似问题的方法? 你的意思是 UIActionSheet 吗?然后您将使用 didDisMissWithButtonIndex 函数并使用 buttonIndex 而不是 indexPath.row 来获取正确的记录。以上是关于SWIFT/CloudKit - 更新记录并将其保存回容器的主要内容,如果未能解决你的问题,请参考以下文章
swift Swift - CloudKit - 获取多个记录