标签: ckfetchrecordchangesopera

CloudKit fetchRecordChangesOperation给出"AppDefaultZone不支持同步语义"

我正在使用CKFetchRecordChangesOperation和CKFetchRecordsChangeToken来获取更改,它告诉我"AppDefaultZone不支持同步语义".

这是违规代码:

- (void)downloadServerChangesWithCompletionBlock:(void (^)(NSError *error))completionBlock
{
    // Prepare to fetch remote changes
    CKDatabase *database = [CKContainer defaultContainer].privateCloudDatabase;
    CKRecordZoneID *zoneID = [[CKRecordZoneID alloc] initWithZoneName:CKRecordZoneDefaultName ownerName:CKOwnerDefaultName];

    // Initialize fetch record changes operation
    CKFetchRecordChangesOperation *fetchRecordChangesOperation = [[CKFetchRecordChangesOperation alloc] initWithRecordZoneID:zoneID previousServerChangeToken:[self changeToken]];
    fetchRecordChangesOperation.recordChangedBlock = ^(CKRecord *record) {
        [self performRecordChange:record];
    };
    fetchRecordChangesOperation.recordWithIDWasDeletedBlock = ^(CKRecordID *recordID){
        [self performRecordDeletion:recordID];
    };
    fetchRecordChangesOperation.fetchRecordChangesCompletionBlock = ^(CKServerChangeToken *serverChangeToken, NSData *clientChangeTokenData, NSError *error) {
        if (error) {
            completionBlock(error);
        } else {
            [self setChangeToken:serverChangeToken];
            completionBlock(nil);
        }
    };

    // Perform the operation
    [database …
Run Code Online (Sandbox Code Playgroud)

objective-c ios cloudkit ckfetchrecordchangesopera

10
推荐指数
1
解决办法
1270
查看次数

cloudKit:公共数据库中的CKFetchRecordChangesOperation

我使用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];
Run Code Online (Sandbox Code Playgroud)

我真的很感谢你的帮助.

ios xcode6 cloudkit ckfetchrecordchangesopera ckfetchnotificationchange

5
推荐指数
1
解决办法
829
查看次数

CKFetchDatabaseChangesOperation不返回记录区ID

我正在我的应用程序中使用CloudKit,并且首先按照WWDC视频“ CloudKit Best Practises”中的最佳做法进行操作

首先要做的就是检查我喜欢的更改,

let changesOperation = CKFetchDatabaseChangesOperation(previousServerChangeToken: databaseChangeToken)
changesOperation.fetchAllChanges = true
changesOperation.recordZoneWithIDChangedBlock = { self.recordZoneWithIDChanged($0) }
changesOperation.recordZoneWithIDWasDeletedBlock = { self.recordZoneWithIDWasDeleted($0) }
changesOperation.changeTokenUpdatedBlock = { self.changeTokenUpdate($0) }
changesOperation.fetchDatabaseChangesCompletionBlock = { self.fetchDatabaseChangesCompletion($0, isMoreComing: $1, error: $2) }

privateDatabase.add(changesOperation)
Run Code Online (Sandbox Code Playgroud)

我正在为其建立访存的私有数据库中有记录,但是我只得到changeTokenUpdatedBlockfetchDatabaseChangesCompletion

我是说对了,我应该期望recordZoneWithIDChangedBlock在运行此操作时看到有人被击中,并将我的私有数据库的默认区域传递到此块中吗?

这意味着当我调用my时fetchDatabaseChangesCompletion,没有什么可取的,因为记录区ID的数组为空:(请注意,error为nil)

fileprivate func fetchDatabaseChangesCompletion(_ newToken: CKServerChangeToken?, isMoreComing: Bool, error: Error?)
{
    if let error = error
    {
        //  Handle error

        return
    }

    let fetchZoneChangesOperation = CKFetchRecordZoneChangesOperation(recordZoneIDs: changedRecordZoneIDs,
                                                                      optionsByRecordZoneID: nil)
    fetchZoneChangesOperation.recordChangedBlock …
Run Code Online (Sandbox Code Playgroud)

cloudkit ckfetchrecordchangesopera

5
推荐指数
1
解决办法
805
查看次数