0

CKModifyRecordsOperationオブジェクトを使用してsaveOperationを開始するとします。操作が完了した後に実行されるmodifyRecordsCompletionBlock内でアクセスしたときに、オブジェクトのrecordsToSaveが開始時に指定されたレコードのリストを格納することを安全に想定できますか?CKModifyRecordsOperationオブジェクトのrecordsToSaveプロパティを、そのmodifyRecordsCompletionBlockで安全に使用できるかどうかを確認します。

私はそう思うでしょうが、私はAppleのドキュメントでこの行を見ました(基本的に "初期"とは何を意味しているのかわかりません):配列の初期内容はinitWithRecordsToSaveで指定したレコードに設定されています:recordIDsToDelete:メソッドの動作を実行する前に、必要に応じて。あなたはこの配列を変更することができます。

を、それは変更することができますまれな事情がある場合は、私は私の再試行ロジックで別の道を行きたい。

EDITコード

を追加しました
CKModifyRecordsOperation *saveOperation = [[CKModifyRecordsOperation alloc] initWithRecordsToSave:recordsToSave recordIDsToDelete:nil] ; 
saveOperation.modifyRecordsCompletionBlock = completionBlock ; //see completion block definition below 
[self.publicDatabase addOperation:saveOperation] ; 

[self.OperationQ addObject: saveOperation] ; //Saved in Q for later retrieval 

completionBlockは短い号にあなたが最後に取得するレコードのリストがCloudKitが正常に更新されたものになります

^(NSArray *savedRecords, NSArray *deletedRecordIDs, NSError * operationError){ 
if(operationError) 
{ 
    DDLogError(@"Save of Touch event records failed with error %@",operationError) ; 
    //Retry, can I do this and safely assume first record retrieved here is the first record I inserted into original recordsToSave array 

    CKRecord *cardinalRecord = self.OperationQ[0].recordsToSave[0] ; 

    //Read a field from it to decide how to handle retry (e.g: retry after delay if important set of records, don't retry if not etc).. 
} 
else 
{ 
    //Handle success case 
} 
} 
+0

あなたの質問には、関連するコードが大きく役立ちます。あなたが何を求めているかを示すコードを表示する。 – rmaddy

+0

上記の編集でいくつかのコードを追加しました。 –

答えて

1

質問に追加したコードに基づいて、最初に変更操作に渡されたレコードの配列を取得すると思われます。 self.OperationQ[0].recordsToSaveへのアクセス

は確かにあなたがAppleのドキュメントから参照するメッセージは、単にあなたのコードはrecordsToSaveの内容を更新した場合、あなたまで、それらの変更を補うために安全であることを意味[[CKModifyRecordsOperation alloc] initWithRecordsToSave:recordsToSave recordIDsToDelete:nil]

に同じ配列が渡されたあなたに戻って得られますaddOperation:に電話してください。

操作によってその配列が変更されることはありません。だから、もしあなたがそれを変更しなければ、コンプリートブロックでそれにアクセスすれば、あなたが元々渡したものを元に戻すことができます。

+0

ありがとうございます。はい、私がやろうとしていることです。それが何らかのコーナーケースで壊れる可能性がある場合(デバッグするのがさらに難しくなる)、これを前提にして、たくさんのものをやりたがりませんでした! –

+0

こんにちはrmadddy、もう1つ質問Q.独自のmodifyRecordsCompletionBlockから "CKModifyRecordsOperationオブジェクト"にアクセスする方法はありますか?私。eは、<完了ブロックを実行している現在のオブジェクトを取得する>のようなステートメントであるmodifyRecordsCompletionBlockのようなもので、そのrecordToSaveプロパティを取得します。これは、オブジェクトを別の配列に格納しないようにします。 –

+0

'saveOperation'と' completionBlock'を同じスコープで宣言すると、yesになります。 – rmaddy

0

として定義されます。あなたが適切な措置を講じる必要がある場合、1つまたは複数の更新に失敗した可能性があります。

は、あなたが考える必要があるシナリオの並べ替えの詳細を、このリンゴのドキュメントのページhttps://developer.apple.com/library/ios/documentation/CloudKit/Reference/CloudKit_constants/index.html#//apple_ref/doc/constant_group/Record_Changed_Error_Keys

を詳しく見てみましょう。

+0

私は、完了ブロックの引数として受け取ったsavedRecordsを参照していません。これは保存できるレコードに設定されたものです。元のオブジェクトのrecordsToSaveプロパティを参照しています。 AFAIK、ドキュメントには、オブジェクトが返ってから2つがセーブになるということは何もありません。それは本当ですか?私はあなたがそれが実際に起こるのを見ましたか? –

+0

真実私はこれに少し問題があります。目標Cを使用してCloudKitのバグを打ちました。カーソル値が返されたバグが正しくありませんでした。私はそれが修正されているかわからない。私はそう思っています。そして、はい、私は報告したバグであると確信しています。そして、バグ番号を得ました。しかし、すべて1年以上前に起きました。 – user3069232

関連する問題