我使用cloudKit构建iOS应用程序。我正在尝试在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];
我真的很感谢你的帮助。
答案 0 :(得分:3)
CKFetchRecordChangesOperation的apple文档声明:
recordZoneID:包含您要获取的记录的区域。该区域可以是 自定义区域。不支持同步默认区域。
这意味着它不能在公共数据库上运行,因为它只支持默认区域。
实现相同功能的正确方法是为您需要的数据创建订阅,并使用CKFetchNotificationChangesOperation检索该数据。当然你也可以只执行一些CKQuery命令,但是你可能经常会获取数据或执行你不需要的查询。