4

Я создаю приложение iOS с помощью cloudKit. Я пытаюсь сделать пакетную выборку данных в cloudKit, получая дельта между устройством и облаком, но похоже, что CKFetchRecordChangesOperation не работает в общедоступной базе данных. Является ли мой единственный параметр опции CKQuery для извлечения моих данных? например:cloudKit: CKFetchRecordChangesOperation в общедоступной базе данных

CKContainer *container = [CKContainer containerWithIdentifier:containerID]; 
    CKDatabase *publicDatabase = [container publicCloudDatabase]; 
    CKQuery *query = [[CKQuery alloc] initWithRecordType:recordType 
               predicate:[NSPredicate predicateWithFormat:@"TRUEPREDICATE"]]; 
    CKQueryOperation *queryOp = [[CKQueryOperation alloc] initWithQuery:query]; 
    queryOp.desiredKeys = @[@"record.recordID.recordName"]; 
    queryOp.recordFetchedBlock = ^(CKRecord *record) 
    { 
     // do something... 
    }; 

    queryOp.queryCompletionBlock = ^(CKQueryCursor *cursor, NSError *error) 
    { 
     // do something else... 
    }; 

    queryOp.resultsLimit = CKQueryOperationMaximumResults; 
    [publicDatabase addOperation:queryOp]; 

Я по-настоящему ценю вашу помощь.

+0

Если я хорошо понимаю, что 'CKFetchRecordChangesOperation' будет работать только в ** частной базе данных ** в пользовательской зоне. 'CKFetchNotificationChangesOperation' также работает и в общедоступной базе данных. –

+0

@ János вы можете отправить пример? – user2924482

+0

здесь я разделил код, как использовать 'CKFetchNotificationChangesOperation': http://stackoverflow.com/questions/30213261/ckfetchnotificationchangesoperation-cant-fetch-notification –

ответ

3

документация яблоко для CKFetchRecordChangesOperation гласит:

recordZoneID: Зона, содержащая записи, которые вы хотите извлечь. Зона может быть пользовательской зоной . Синхронизация зоны по умолчанию не поддерживается.

Это означает, что он не будет работать в общедоступной базе данных, поскольку поддерживает только зону по умолчанию.

Правильный способ достижения такой же функциональности - создать подписку на необходимые данные и получить эти данные с помощью CKFetchNotificationChangesOperation. Конечно, вы также можете просто выполнить некоторые команды CKQuery, но тогда вы, вероятно, часто будете получать данные или выполнять запросы, которые вам не нужны.

+0

Обратите внимание, что последнее предложение отсутствует в версии OS X документации класса в XCode 6.4. – Mojo66

+0

CKFetchNotificationChanges бесполезен для OP, потому что это не устройство, а его учетная запись. – malhal