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

相關問題