複数のテーブルのレコードをプライベート クラウド データベースのデフォルト ゾーンに保存するために使用CKModifyRecordsOperation
していますが、テーブル 'X' を除いて常に以下のエラーが返されます。
レコードをサーバーに保存中にエラーが発生しました: タイプ 'X' から 'Y' へのレコードの更新は無効です
詳細error.userInfo
:
{
CKErrorDescription = "レコード CKRecordID の保存中にエラーが発生しました: 0x7fd7a3d4c0c0; 1:(_defaultZone: defaultOwner ) をサーバーに送信しました: レコードをタイプ 'X' から 'Y' に更新する試みは無効です";
ContainerID = "iCloud.com...";
NSDebugDescription = "CKInternalErrorDomain: 2006";
NSLocalizedDescription = "レコードをサーバーに保存中にエラーが発生しました: タイプ 'X' から 'Y' へのレコードの更新は無効です";
NSUnderlyingError = "CKError 0x7fa0d250c4e0: \"無効な引数\" (2006); サーバー メッセージ = \"タイプ 'X' から 'Y' へのレコードの更新の試みが無効です\"; uuid = E2E...D1E; コンテナー ID = \ "iCloud.com...\"";
RequestUUID = "E2E...
errorKey = ck1rosofi;
}
関連するコード スニペット:
- (void)sync
{
...
NSMutableArray * operations;
for (NSString *tableName in @[@"X", @"Y"]) {
CKModifyRecordsOperation * operation = [self _modifyRecordsOperationWithTableName:tableName];
if (operation) {
if (operations) [operations addObject:operation];
else operations = [NSMutableArray arrayWithObject:operation];
}
}
if (operations) {
[operationQueue addOperations:operations waitUntilFinished:NO];
}
}
- (CKModifyRecordsOperation *)_modifyRecordsOperationWithTableName:(NSString *)tableName
{
...
NSMutableArray * recordsToSave = [NSMutableArray array];
for (KYModel <KYModel_iCloudProtocol> *instance in unsyncedInstances) {
CKRecordID * objectID = [[CKRecordID alloc] initWithRecordName:@(instance.id).stringValue];
CKRecord * cloudRecord = [[CKRecord alloc] initWithRecordType:tableName recordID:objectID];
... setup record detail
[recordsToSave addObject:record];
}
CKModifyRecordsOperation * operation = [[CKModifyRecordsOperation alloc] initWithRecordsToSave:recordsToSave recordIDsToDelete:nil];
operation.database = [[CKContainer defaultContainer] privateCloudDatabase];
operation.savePolicy = CKRecordSaveAllKeys;
operation.qualityOfService = NSQualityOfServiceUserInteractive;
operation.atomic = NO;
operation.perRecordProgressBlock = ...;
operation.perRecordCompletionBlock = ^(CKRecord *record, NSError *error) {
if (error) {
// got error here
}
...
};
operation.modifyRecordsCompletionBlock = ...;
return operation;
}