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