ios – CloudKit – 如何保存记录如果不存在

ios – CloudKit – 如何保存记录如果不存在,第1张

概述我正在尝试创建一个包含唯一值的记录类型,并将作为另一个记录类型的目标引用对象.例如,录制类型 – 电影将包含用户提交的唯一电影列表.而且FavoriteMovies将包含用户参考和电影参考.用户可以从现有电影列表中进行选择,也可以向其中添加新电影. 如果我创建一个新的电影记录,而另一个用户创建一个具有相同名称的新记录(在我检索电影列表之后,但在我尝试添加新电影之前),则会出现问题.这两个新记录被认 我正在尝试创建一个包含唯一值的记录类型,并将作为另一个记录类型的目标引用对象.例如,录制类型 – 电影将包含用户提交的唯一电影列表.而且FavoriteMovIEs将包含用户参考和电影参考.用户可以从现有电影列表中进行选择,也可以向其中添加新电影.

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

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

是否只有在单个事务中不存在该值时才能插入记录?

解决方法 如果我正确理解了您的用例,您可以将movIERecord.recordID.recordname设为电影的名称,并使用带有savePolicy IfServerRecordUnchanged的CKModifyRecordsOperation来有效地保存如果不存在.如果您尝试保存服务器上已存在的记录,它将返回一个您可以忽略的错误:
let saveRecordsOperation = CKModifyRecordsOperation()saveRecordsOperation.recordsToSave = [movIERecord]saveRecordsOperation.savePolicy = .IfServerRecordUnchanged@H_502_13@  

使用savePolicy IfServerRecordUnchanged此 *** 作将保存新的MovIE记录(如果它尚不存在于服务器上)(如果不存在则保存),但在后续尝试覆盖服务器上已存在的MovIE记录时将返回以下错误(如果它不是从服务器获取的记录的较新修改版本):

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

您可以在perRecordCompletionBlock中处理此冲突,但在您的特定用例中,您可以对冲突错误不做任何 *** 作,因此每条MovIE记录将是第一个使用该CKRecordID保存的记录.

总结

以上是内存溢出为你收集整理的ios – CloudKit – 如何保存记录如果不存在全部内容,希望文章能够帮你解决ios – CloudKit – 如何保存记录如果不存在所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1107699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存