当我使用保存策略为CKAsset
的CKModifyRecordsOperation
保存包含.IfServerRecordUnchanged
的记录时,我正在测试同步冲突。我得到了错误。此CKErrorCode.ServerRecordChanged
返回解决冲突的有用信息,包括我尝试保存的CKError
和记录的当前服务器版本。第一个在CKRecord
中,第二个在error.userInfo[CKRecordChangedErrorClientRecordKey]
中。
我的问题是,我正在尝试使用以下代码访问服务器记录的ckasset:
if let photoAsset = rec["myPhoto"] as? CKAsset {
print("PhotoAsset.fileURL: \(photoAsset.fileURL)") // BAD_ACCESS ERROR HERE
self.myPartner.photo = NSData(contentsOfURL: photoAsset.fileURL)
}
我不明白这是怎么可能的。但在进一步调查之后,我打印出客户机和服务器的CKrecords,而服务器的CKrecords缺少“path”属性。
客户端ckasset…myphoto(修改)->ckasset:0x7B960D90;path=~/tmp/bf185b2c-7a39-4730-9530-9797e843243aphoto,size=373959,uploadRank=0,uploadReceipt=A92eg1qoyPg7yrg3,uuid=3c2d5dc8-4f5-4a81-853b-395fc1c59862,referencesignature=,flags=uploaded,wrappedEncryptionKey=,signature=
服务器ckasset…myphoto=ckasset:0x7be700d0;referencesignature=,size=373959,uploadRank=0,uuid=df5d2eb4-033c-49a2-af52-6055b5a44106,wrappedEncryptionKey=,signature=
注意服务器1中的
error.userInfo[CKRecordChangedErrorServerRecordKey]
是如何丢失的?有人能解释一下吗?为了解决这个问题,我尽量避免触及服务器记录中的ckasset。我想至少能查到零。我想把这个放在那里,以防它能帮助别人。 最佳答案
由于访问fileURL
时发生崩溃,这很可能是一个框架错误。可能是因为词典中隐藏了CKRecord
而造成的疏忽。我只是用一个常规的。