iosobjective-ccloudkitckmodifyrecordsoperation

CKModifyRecordsOperation modifyRecordsCompletionBlock not being called


I'm using CKModifyRecordsOperation to save a set of records and if I have internet connection all works well and completion block is being called. But when I don't have connection the completion block is not being called and I don't get any information that my operations failed.

I'm using the following code in completion block

modifyOperations.modifyRecordsCompletionBlock = ^(NSArray *savedRecords, NSArray *deletedRecordIDs, NSError *error)
{
    if(error){
        NSLog(@"Error: %@", error.localizedDescription);
    }

    item.creatorRecordId = record.recordID;
};

and then I'm performing operation using

[self.publicDB addOperation:modifyOperations];

Any ideas how can I get an information if the operation failed for example in the case where there is no internet connection?


Solution

  • CloudKit operations have their qualityOfService property set to NSQualityOfServiceUtility by default.

    Operations that use NSQualityOfServiceUtility or NSQualityOfServiceBackground may be marked as using discretionary network requests. The system can hold discretionary network requests if network connectivity is poor, so you might not get a response from the server until conditions improve and the system sends the request.

    If you'd like your request to be sent immediately in all cases, set CKOperation.qualityOfService to NSQualityOfServiceUserInitiated or NSQualityOfServiceUserInteractive.