4

我使用cloudKit构建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

请注意,XCode 6.4中的类文档的OS X版本中缺少最后一句。 – Mojo66

+0

CKFetchNotificationChanges对于OP来说没有用处,因为它不是每个设备的每个帐户。 – malhal

相关问题