0

Предположим, что я запускаю операцию сохранения с помощью объекта CKModifyRecordsOperation. Могу ли я с уверенностью предположить, что recordToSave объекта будет хранить список записей, заданный в начале, когда я обращаюсь к нему в файле modifyRecordsCompletionBlock, который выполняется после завершения операции.Может ли свойство recordsToSave объекта CKModifyRecordsOperation безопасно использоваться в его измененииRecordsCompletionBlock

Я бы так предположил, но затем я увидел эту строку в документе 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 определяется как

^(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, безусловно, даст Вам тот же массив передается в [[CKModifyRecordsOperation alloc] initWithRecordsToSave:recordsToSave recordIDsToDelete:nil]

В сообщении вы ссылаетесь из документации Apple, просто означает, что если ваш код обновил содержание recordsToSave, это безопасно, чтобы сделать эти изменения, пока вы позвоните по телефону addOperation:.

Операция никогда не изменит этот массив. Поэтому, если вы не измените его, доступ к нему в блоке завершения даст вам именно то, что вы передали изначально.

+0

Спасибо. Да, это то, что я пытаюсь сделать. Не хотел делать целую кучу вещей, предполагая это, если он может сломаться в каком-то угловом корпусе (что еще труднее отлаживать)! –

+0

Привет rmadddy, еще один Q. Есть ли способ получить доступ к «объекту CKModifyRecordsOperation» из своего собственного файла измененийRecordsCompletionBlock? Я.e что-то вроде в файле modifyRecordsCompletionBlock, такой как <получить текущий объект, чей блок завершения, который я выполняю>, получает его свойство recordToSave ... это позволит мне не хранить объект в отдельном массиве. –

+0

Если вы объявите 'saveOperation' и' completeBlock' в той же области, то да. – rmaddy

0

В коротком п списке записей вы получите в конце будут те, которые CloudKit успешно обновлены. Существует вероятность, что он не смог обновить один или несколько, и в этом случае вам необходимо предпринять соответствующие действия.

Присмотритесь на этой яблочной странице документации https://developer.apple.com/library/ios/documentation/CloudKit/Reference/CloudKit_constants/index.html#//apple_ref/doc/constant_group/Record_Changed_Error_Keys

Каких деталей рода сценарии, которые вы должны думать о.

+0

Я не имею в виду сохраненные записи, полученные в качестве аргумента для блока завершения. Это тот, который установлен для записей, которые могут быть сохранены. Я имею в виду свойство recordsToSave исходного объекта. AFAIK. В документации нет ничего, что говорит о том, что они станут сохранением после возвращения объекта. Вы уверены, что это так? Вы видели это на практике? –

+0

На самом деле у меня есть немного проблем с этим, ударив об ошибке в CloudKit, используя цель C. Ошибка, возвращаемая значением курсора, была неправильной. Я не знаю, исправлено ли это. Я бы так предположил, и да, я уверен, что это была ошибка, о которой я сообщал, и получил номер ошибки, хотя все это произошло более года назад. – user3069232