5

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

よろしくお願いします。

4

1 に答える 1

3

CKFetchRecordChangesOperation の Apple ドキュメントには次のように記載されています。

recordZoneID : 取得するレコードを含むゾーン。ゾーンはカスタム ゾーンにすることができます。デフォルト ゾーンの同期はサポートされていません。

これは、デフォルト ゾーンのみをサポートするため、パブリック データベースでは機能しないことを意味します。

同じ機能を実現する正しい方法は、必要なデータのサブスクリプションを作成し、CKFetchNotificationChangesOperation を使用してそのデータを取得することです。もちろん、いくつかの CKQuery コマンドを実行することもできますが、そうすると、データをフェッチしたり、不要なクエリを実行したりすることがよくあります。

于 2015-05-25T09:24:19.880 に答える