2015-08-24 20 views
8

Sto cercando di salvare un CloudKit record, ma sto ottenendo il seguente errore da cloudkit:Cloudkit: "Errore di salvataggio record di operazione di scrittura non consentita"

error saving record este es error: Error saving record <CKRecordID: 0x7fef15b5d2a0; 2:(_defaultZone:__defaultOwner__)> to server: WRITE operation not permitted 

Ecco come sto cercando di salvare la cronaca:

[publicDatabase saveRecord:recordContent completionHandler:^(CKRecord *record, NSError *error){ 

if (!error) 
{ 
    NSLog(@"saved!!!"); 

} 
else 
{ 
    if ([[error.userInfo valueForKey:@"ErrorDescription"] isEqualToString:@"record to insert already exists"]) 
    { 
     NSLog(@"record already exist %@",[error.userInfo valueForKey:@"ErrorDescription"]); 

    } 

    NSLog(@"error saving record : %@",error.localizedDescription); 
} 
}]; 

Ma prima aveva verifico se cloudkit è disponibile:

[myContainer accountStatusWithCompletionHandler:^(CKAccountStatus accountStatus, NSError *error) 
    { 
     NSLog(@" no error but status %ld",accountStatus); 

     if (((accountStatus == 3) || (accountStatus == 2)) && (!error)) 
     { 
      NSLog(@" no error but status %ld",accountStatus); 


      //   typedef NS_ENUM(NSInteger, CKAccountStatus) { 
      //    /* An error occurred when getting the account status, consult the corresponding NSError */ 
      //    CKAccountStatusCouldNotDetermine     = 0, 
      //    /* The iCloud account credentials are available for this application */ 
      //    CKAccountStatusAvailable       = 1, 
      //    /* Parental Controls/Device Management has denied access to iCloud account credentials */ 
      //    CKAccountStatusRestricted       = 2, 
      //    /* No iCloud account is logged in on this device */ 
      //    CKAccountStatusNoAccount       = 3, 
      // 
      //  } 
     } 


     if (error) 
     { 
      NSLog(@" accountStatus error %@",error); 

     } 
    } ]; 

Dove sto ottenendo lo status 1, che significa CKAccountStatusAvailable.

Qualcuno sa perché questo sta accadendo ha funzionato bene fino all'ultimo record o qualcuno di voi conosce un lavoro intorno a questo?

Apprezzerò molto il vostro aiuto.

+0

Stai salvando un nuovo record o aggiornando un record esistente? Se si sta aggiornando, è stato creato anche quel record (lo stesso id della mela). In caso contrario, vai alla dashboard di iCloud e imposta le autorizzazioni a quel recordType che tutti gli utenti possono aggiornare. –

+0

Grazie per aver sottolineato che è necessario impostare le autorizzazioni per consentire l'eliminazione di record pubblici. –

risposta

21

È necessario impostare l'autorizzazione per consentire a un utente di scrivere (o eliminare) un record creato da qualcun altro. Lo fai nell'ambiente di sviluppo, in Schema, Tipi di record, seleziona il record specifico, poi a destra c'è un menu a discesa con l'etichetta Sicurezza. Concedi al ruolo "autenticato" il diritto di leggere e scrivere. Quindi distribuire in produzione.

+0

Questo dovrebbe essere contrassegnato come la risposta corretta (sebbene il "deploy to production" non sia necessario se si sta ancora lavorando nello sviluppo). – PKCLsoft

+0

Questo è ora disponibile nella scheda Ruoli di sicurezza nella parte superiore :) –

Problemi correlati