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 addOperation:fetchRecordChangesOperation]; } 

这里是打印出来的错误

 [PBCloudKitSyncManager] Error Downloading Data: <CKError 0x157a2500: "Server Rejected Request" (15/2027); server message = "AppDefaultZone does not support sync semantics"; uuid = [redacted]; container ID = "[redacted]"> 

我通过切换到自定义区域解决了问题。 当我初始化CloudKit时,创build区域,当我去初始化zoneID我使用这个:

 CKRecordZoneID *zoneID = [[CKRecordZoneID alloc] initWithZoneName:@"Custom Zone Name" ownerName:userRecordName]; 

其中userRecordName是CKRecord的logging名称,当我在Cloudkit初始化中调用此方法时,为用户获取:

 [CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) { if (recordID) { // Save the user record id [self saveUserRecordName:recordID.recordName]; /... } }];