2015-09-25 6 views
6

Come funziona .DeleteSelf? Documenti dice:CK: L'attributo .DeleteSelf non ha effetto

Quando l'azione dell'oggetto di riferimento è impostato su CKReferenceActionDeleteSelf, il target di riferimento, cioè il record memorizzato nel recordID del riferimento di proprietà-diventa il proprietario del documento di origine. L'eliminazione del record di destinazione (proprietario) elimina tutti i record di origine .

ma la mia impressione è che l'eliminazione di un obiettivo non eliminerà sempre la fonte. Ed è abbastanza fastidioso quando rimane nel contenitore, il client lo scarica e si aspetta che il punto di riferimento venga da qualche parte, ma la destinazione non esiste quando si crea una fetta dell'archivio dati del server sul client?

Come si considera questo caso? Ignori quel tipo di record? O periodicamente cerchi l'archivio CloudKit, cercando i record corrotti per eliminarli?

Oppure invece di eliminare un record è meglio impostare un attributo che si trovi in ​​uno stato cancellato, ma conservarlo nel database?

+0

Si dovrebbe essere in grado di fare affidamento sul .DeleteSelf. Se non funziona, dovresti creare una segnalazione di bug su http://bugreport.apple.com Se vuoi creare una soluzione per questo bug e dato che hai il controllo di ciò che accade nel momento in cui stai rimuovendo un record Penso che sarebbe meglio anche rimuovere manualmente tutti i record correlati nello stesso momento. –

+0

Sto anche osservando un comportamento intermittente con .DeleteSelf –

+0

Mi sto imbattendo in questo problema. Ho diverse tabelle con una relazione uno-a-molti con una tabella principale. Nel database pubblico, aggiungo il record principale e poi alcuni record nelle altre tabelle. Se tutto viene eseguito da un utente e nessun altro utente nemmeno accede ai dati, quindi eliminando i risultati del record master in tutti gli altri record eliminati come previsto. Ma quando un altro utente accede ai dati, la cancellazione a cascata non avviene e viene cancellato solo il record principale. Sembra inutile se non puoi contare su questa funzione. – rmaddy

risposta

0

Se si elimina tramite CloudKit Dashboard, è necessario attendere prima di cambiare i tipi di record per controllare l'altra estremità del riferimento. Molto probabilmente sei passato prima che l'eliminazione fosse realmente avvenuta. Puoi utilizzare Safari's Web Inspector nella scheda Rete per verificare quando l'eliminazione è effettivamente terminata. Ci vuole molto tempo per cancellare più record.

1

Ho appena lottato con questo per un po 'e ho pensato di condividere le mie scoperte ...

Si tratta fondamentalmente di un problema di autorizzazione. L'eliminazione a cascata funzionerà solo se l'utente che cancella i record ha le autorizzazioni di "scrittura" su tutti i record che devono essere eliminati. Quindi in CloudKit Dashboard, l'eliminazione a cascata funzionerà solo per i record creati con l'account iCloud dello sviluppatore.

Se è necessario eliminare i record che non appartengono all'utente che li elimina, è possibile aggiungere autorizzazioni di "scrittura" per un tipo di record in Sicurezza.

enter image description here

+0

I miei record si trovano nella stessa zona creata dallo stesso utente e i riferimenti non vengono ancora eliminati. Penso che sia un bug nel CloudKit Dashboard. E sì, sta ancora accadendo verso la fine del 2017. :) –