Is there any limit to the result of a query to Cloudkit private default zone? I have no clue why I only receive first 100 records with the following query:<
I use this code for my project to fetch all record from a record type, it's in objective c. I use "Entry" as desiredKeys.
+ (void)fetchRecordsWithType:(NSString *)recordType
completionHandler:(void (^)(NSArray *records, NSError *error))completionHandler {
NSPredicate *truePredicate = [NSPredicate predicateWithValue:YES];
CKQuery *query = [[CKQuery alloc] initWithRecordType:recordType
predicate:truePredicate];
CKQueryOperation *queryOperation = [[CKQueryOperation alloc] initWithQuery:query];
queryOperation.desiredKeys = @[@"Entry"];
NSMutableArray *results = [NSMutableArray new];
queryOperation.recordFetchedBlock = ^(CKRecord *record) {
[results addObject:record]; };
queryOperation.queryCompletionBlock = ^(CKQueryCursor *cursor, NSError *error) {
[self retrieveNextBatchOfQueryFromCursor:cursor
results:results
error:error
completionHandler:completionHandler]; };
[[self CloudKitContainer].privateCloudDatabase addOperation:queryOperation]; }
+ (void)retrieveNextBatchOfQueryFromCursor:(CKQueryCursor *)cursor
results:(NSMutableArray *)results
error:(NSError *)error
completionHandler:(void (^)(NSArray *records, NSError *error))completionHandler {
// CloudKit apparently has query limit
if (cursor != nil
&& !error) {
CKQueryOperation *nextOperation = [[CKQueryOperation alloc] initWithCursor:cursor];
nextOperation.recordFetchedBlock = ^(CKRecord *record) {
[results addObject:record]; };
nextOperation.queryCompletionBlock = ^(CKQueryCursor *cursor, NSError *error) {
[self retrieveNextBatchOfQueryFromCursor:cursor
results:results
error:error
completionHandler:completionHandler]; };
[[self CloudKitContainer].privateCloudDatabase addOperation:nextOperation]; }
else {
dispatch_async(dispatch_get_main_queue(), ^(void){
completionHandler(results, error); }); }}