cloudKit: CKFetchRecordChangesOperation в общедоступной базе данных

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

 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];

Я очень ценю вашу помощь.

1 ответ

Apple документация для CKFetchRecordChangesOperation заявляет:

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

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

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

Другие вопросы по тегам