4

の保存ポリシーをCKAsset使用して (単に JPG 画像) を含むレコードを保存するときに、同期の競合をテストしています。エラーが発生しています。これにより、保存しようとしたレコードや現在のサーバー バージョンなど、競合の解決に役立つ情報が返されます。1つ目は 2つ目は です。CKModifyRecordsOperation.IfServerRecordUnchangedCKErrorCode.ServerRecordChangedCKErrorCKRecorderror.userInfo[CKRecordChangedErrorClientRecordKey]error.userInfo[CKRecordChangedErrorServerRecordKey]

私の問題は、次のコードでサーバー レコードの 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 には「パス」プロパティがありません。

client CKAsset...myPhoto (変更) -> CKAsset: 0x7b960d90; path=~/tmp/BF185B2C-7A39-4730-9530-9797E843243Aphoto, size=373959, uploadRank=0, uploadReceipt=A92Eg1qoyPG7yrg3, UUID=3C2D5DC8-4FF5-4A81-853B-395FC1C59862, referenceSignature=<012fd149 200fc600 617e3907 88763e3e 5002abbf 5b> 、フラグ = アップロード済み、ラップされた暗号化キー =、署名 = <0134a297 38d52f5f 9275bfba fce5b1a8 3d6b9692 d3>

サーバー CKAsset...myPhoto = CKAsset: 0x7be700d0; referenceSignature=<015337bd 84409893 7c014f46 36248d27 ce911dc3 7a>, size=373959, uploadRank=0, UUID=DF5D2EB4-033C-49A2-AF52-6055B5A44106, wrappedEncryptionKey=<767e7cfd d1e62110 32119ee9 f6f026b3 5bcf0cc3 8053a4de>, signature=<0134a297 38d52f5f 9275bfba fce5b1a8 3d6b9692 d3>

path=~/tmp/C706423B-A3E8-4051-A9B3-483C718BFBF5photoサーバー 1 から がどのように欠落しているかに注意してください。誰でもこれを説明できますか?それを修正するために、サーバー レコードから CKAsset に触れないようにしています。少なくともnilをチェックできるようにしたいと思います。他の誰かに役立つ場合に備えて、これを公開したかったのです。

4

3 に答える 3

0

にアクセスするとクラッシュするためfileURL、これはおそらくフレームワークのバグです。CKRecordおそらく辞書に埋もれているため見落としです。私はそれを定期的にフォローアップしfetch(withRecordID:)ます。

于 2017-10-26T15:26:02.120 に答える