CloudKit-如果不存在,如何保存记录

丹尼斯

我试图制作一个包含唯一值的记录类型,并将其用作其他记录类型的目标引用对象。例如,“记录类型-电影”将包含用户提交的电影的唯一列表。FavoriteMovies将包含一个用户参考和一个电影参考。用户可以从现有电影列表中进行选择,也可以向其中添加新电影。

如果我创建一个新的电影记录,而另一个用户创建一个具有相同名称的新记录,则会发生问题(在我检索了电影列表之后,但是尝试添加新的电影列表之前)。这两个新记录被视为具有不同recordID的不同记录。这意味着一旦我保存了新的电影,就会有两个带有保存名称的电影实例。

我无法找到一种对“电影记录类型”执行“保存如果不存在”类型的操作的方法。我可以在查询的completeBlock中进行保存,但是这两个操作不是保证唯一性的原子事务。据我所知,这也是与链接的情况下CKQueryOperationCKModifyRecordsOperation

只有在单个事务中不存在该值时,才可以插入记录吗?

古托·阿劳霍

如果我正确理解了您的用例,则可以使movieRecord.recordID.recordName成为电影的名称,并CKModifyRecordsOperation与之savePolicy IfServerRecordUnchanged一起使用以有效地保存“不存在”。如果尝试保存服务器上已存在的记录,它将返回一个错误,可以忽略该错误:

let saveRecordsOperation = CKModifyRecordsOperation()
saveRecordsOperation.recordsToSave = [movieRecord]
saveRecordsOperation.savePolicy = .IfServerRecordUnchanged

使用savePolicy,IfServerRecordUnchanged如果服务器上尚不存在新的电影记录,则此操作将保存新的电影记录(如果不存在则保存),但是在随后的任何尝试覆盖服务器上已经存在的电影记录的尝试中,都会返回以下错误(已提供)它不是从服务器获取的记录的更新版本):

<CKError 0x14d23980: "Server Record Changed" (14/2017); server message = "record to insert already exists">

您可以在中解决此冲突,perRecordCompletionBlock但在您的特定用例中,您不能对冲突错误做任何事情,因此每个Movie记录将是带有CKRecordID的第一个保存的记录。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CloudKit:使用CKModifyRecordsOperation保存记录时出错

来自分类Dev

Swift CloudKit SaveRecord“保存记录时出错”

来自分类Dev

尝试保存记录时,Cloudkit给出错误

来自分类Dev

CloudKit记录保存进度

来自分类Dev

CloudKit返回太多记录

来自分类Dev

由于字段不存在而创建不保存记录

来自分类Dev

如何从Cloudkit下载多个记录

来自分类Dev

如何从cloudkit接收图像?

来自分类Dev

如何加速 Cloudkit 'fetchRecordWithID'

来自分类Dev

使用CloudKit JS更新记录

来自分类Dev

在CloudKit中保存对象数组

来自分类Dev

如何避免对Apples CloudKit收费?

来自分类Dev

如何获得CloudKit的实际配额?

来自分类Dev

如何获得CloudKit的实际配额?

来自分类Dev

如何批准上传到CloudKit

来自分类Dev

如何更新CloudKit中记录类型的字段?

来自分类Dev

如何知道CloudKit区域是否已经存在

来自分类Dev

如何在 CloudKit 上保存密码?

来自分类Dev

获取与CloudKit查询匹配的记录数

来自分类Dev

从当前的iCloud用户获取CloudKit记录

来自分类Dev

使用UserRecordID获取CloudKit用户记录

来自分类Dev

使用CloudKit建立记录属性的总和

来自分类Dev

以编程方式创建CloudKit记录类型

来自分类Dev

从当前的iCloud用户获取CloudKit记录

来自分类Dev

订阅在 sharedDB cloudkit 中记录更改

来自分类Dev

PromiseKit和CloudKit保存(使用Swift)

来自分类Dev

将CloudKit RecordID保存到CoreData

来自分类Dev

为CloudKit获取“插入的记录已存在”错误

来自分类Dev

SWIFT / CloudKit-更新记录并将其保存回容器