10
我正在使用CKFetchRecordChangesOperation和CKFetchRecordsChangeToken來獲取更改,它告訴我「AppDefaultZone不支持同步語義」。CloudKit fetchRecordChangesOperation給出了「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]">
CKRecordZoneID的文檔指出:'要指定當前用戶,請使用CKOwnerDefaultName常量。如果您爲此參數指定nil或空字符串,則此方法會引發異常。' – Klaas 2014-10-25 14:31:12
這是否意味着'CKFetchRecordChangesOperation'只能在私有數據庫中工作? – 2014-12-31 13:17:05
@János我實際上處理私人數據庫的問題。因此,在我看來,CKFetchRecordChangesOperation在公用數據庫或專用數據庫的默認區域中不起作用。因此,要使用該操作,您必須創建一個自定義區域並監視該自定義區域中的更改。 – Jonathan 2015-01-06 22:57:44