如果我创建一个新的电影记录,而另一个用户创建一个具有相同名称的新记录(在我检索电影列表之后,但在我尝试添加新电影之前),则会出现问题.这两个新记录被认为是具有不同记录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 – 如何保存记录如果不存在所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)