2017-12-07 2 views
0

ich unter den Code geschrieben teilen sich ein CKRecord zu teilen:Es kann keine CKRecord

CKRecordZone *restaurantsZone = [[CKRecordZone alloc] initWithZoneName:@"RestaurantsZone"]; 
CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:self.recordName zoneID:restaurantsZone.zoneID]; 
CKRecord *record = [[CKRecord alloc] initWithRecordType:@"Restaurant" recordID:recordID]; 
[record setValue:self.restaurant forKey:@"name"]; 

UICloudSharingController *cloudSharingController = [[UICloudSharingController alloc] initWithPreparationHandler:^(UICloudSharingController * _Nonnull controller, void (^ _Nonnull preparationCompletionHandler)(CKShare * _Nullable, CKContainer * _Nullable, NSError * _Nullable)) { 
    [self shareRootRecord:record name:self.restaurant completion:preparationCompletionHandler]; 
}]; 
cloudSharingController.delegate = self; 
[self presentViewController:cloudSharingController animated:YES completion:nil]; 

Und die shareRootRecord Funktion:

- (void)shareRootRecord:(CKRecord *)rootRecord name:(NSString *)name completion:(void (^)(CKShare * _Nullable share, CKContainer * _Nullable container, NSError * _Nullable error))completion 
{ 
    CKShare *shareRecord = [[CKShare alloc] initWithRootRecord:rootRecord]; 
    shareRecord[CKShareTitleKey] = name; 
    NSArray *recordsToSave = @[rootRecord, shareRecord]; 
    CKContainer *container = [CKContainer defaultContainer]; 
    CKDatabase *privateDatabase = [container sharedCloudDatabase]; 

    CKModifyRecordsOperation *operation = [[CKModifyRecordsOperation alloc] initWithRecordsToSave:recordsToSave recordIDsToDelete:@[]]; 
    [operation setPerRecordCompletionBlock:^(CKRecord * _Nullable record, NSError * _Nullable error) { 
     if (error) { 
      NSLog(@"%@", [error localizedDescription]); 
     } 
    }]; 
    [operation setModifyRecordsCompletionBlock:^(NSArray<CKRecord *> * _Nullable savedRecords, NSArray<CKRecordID *> * _Nullable deletedRecordIDs, NSError * _Nullable error) { 
     if (error) { 
      NSLog(@"%@", [error localizedDescription]); 
     } 
     completion(shareRecord, container, error); 
    }]; 

    [privateDatabase addOperation:operation]; 
} 

Nun, wenn ich diesen Code ausführen, wird der folgende Fehler ausgelöst : Only shared zones can be accessed in the shared DB. Ich kann jedoch nicht herausfinden, warum. Irgendwelche Ideen?

Antwort

0

Stellen Sie sicher, dass die CKRecord, die Sie teilen möchten, bereits in der Besitzer privateDB ist, bevor Sie es teilen.

Wenn ein Teilnehmer die Freigabe akzeptiert, wird der Datensatz in den Teilnehmern sharedDB angezeigt.

Dieser Code erstellt einen Datensatz und eine Freigabe und versucht dann, die sharedDB des Besitzers mit den Datensätzen zu ändern.

Konzeptuell möchten Sie einen a-Eintrag in einer Besitzer privateDB mit einem Teilnehmer teilen. Die sharedDB eines Teilnehmers agiert als Fenster in die privateDB des Eigentümers.

Verwandte Themen