2016-04-07 8 views
6

Qualcuno ha esperienza con l'opzione CloudKit su DeleteSelf per un CKReference? Ecco quello che ho ottenuto dalla documentazione:Opzione Elimina CloudKit Self per CKRiferimento non funziona

DeleteSelf

l'azione di eliminazione per i record a cui fa riferimento. L'eliminazione di un record elimina anche eventuali record contenenti oggetti CKReference che puntano a quel record. La cancellazione dei record aggiuntivi può innescare la cancellazione a cascata di più record. Le eliminazioni sono asincrone nella zona predefinita e immediate in una zona personalizzata.

Così ho provato questo fuori, ho creato multipla CKReference oggetti sia utilizzando il CloudKit Dashboard e usando il mio app. Ogni volta che lo faccio con la mia app creo il riferimento in questo modo:

let reference:CKReference = CKReference(recordID: savedFriend.friendID, action: CKReferenceAction.DeleteSelf) 

so che viene assegnato per eliminare se stesso, perché nel cruscotto mostra l'opzione spuntata: delete self checked off

I deve fare qualcosa di errato perché ogni volta che vado a cancellare manualmente quel record a cui si fa riferimento usando il dashboard, o impostare la mia app per eliminarlo a livello di programmazione, il record scompare ma il riferimento non viene mai rimosso. Ho pensato che forse dovrei semplicemente aspettare e alla fine succederebbe, ma ore dopo è ancora lì controllato come avrebbe dovuto cancellarsi. È un po 'frustrante perché ho progettato parte del mio codice ipotizzando che questo avrebbe funzionato, ora posso avere un'app che spreca risorse cercando di trovare uno CKRecord che non esiste più. Dovrei semplicemente non fare affidamento su questo per mai funzionare? Apprezzo qualsiasi aiuto o consiglio che posso ottenere.

UPDATE ~ 04/07/2016

ho saltato la pistola tornare qui e la pubblicazione di un aggiornamento che il problema si era risolto. Non ero totalmente convinto che la questione non sarebbe tornata in auge, quindi ho cercato un po 'di rassicurazione la scorsa notte. Ho creato 5 diversi CKRecords e creato vari oggetti diversi CKReference per farli riferimento nel mio database. Ho quindi proceduto a impostare l'opzione CKReferenceAction.DeleteSelf su ciascun riferimento (ne ho provati due manualmente tramite la dashboard e gli altri tre sono stati eseguiti a livello di codice). Ad ogni modo, ho aspettato qualche minuto e poi cancellato i record di riferimento ... dopo dieci minuti i riferimenti erano ancora presenti. Ho aspettato altri 5-10 minuti e loro erano ancora lì, così sono andato a letto supponendo che sarebbero dovuti andare via prima mattina, giusto? Sbagliato! Dodici ore più tardi le voci CKReference sono ancora lì ei record di riferimento sono ancora andati. Mi sto davvero grattando la testa, sembra che si tratti di un bug con CloudKit. Devo dire che ho notato anche alcuni comportamenti strani nella mia dashboard. Negli ultimi quattro giorni o giù di lì, verso il basso nell'angolo in basso a sinistra si è sempre detto che è "Reindicizzazione dei dati di sviluppo", ecco un immagine, ad esempio: reindexing notification

Che potrebbe causare questo problema? Qualcuno ha familiarità con questo problema e conosce un modo per risolvere questo? Tutti i suggerimenti sarebbero apprezzati. Ho presentato una segnalazione di bug con Apple.

+1

Avete impostare i controlli di accesso o autorizzazioni che potrebbe essere sempre nel modo? Ho appena fatto un test rapido nel cruscotto. Ho creato un oggetto di un tipo. Ho creato un oggetto di un secondo tipo. Nel secondo oggetto ho messo un riferimento al primo oggetto e impostato "DeleteSelf". Quindi ho cancellato il primo oggetto. Il secondo oggetto è stato cancellato – Paulw11

+0

Wow, devi avere una sorta di influenza magica sugli Dei di CloudKit. Ho sottolineato questo problema per la parte migliore dell'intera giornata, e subito dopo aver letto il tuo commento, sono andato a fare altri test e controllare i miei permessi, e ora TUTTI i riferimenti che non si stavano cancellando sono andato ... Non ho toccato nulla, ho appena ricaricato il mio cruscotto di nuovo. Sono felice che ora stiano lavorando fuori dal nulla, ma sono anche confuso. Perché dovrei aver avuto circa un ritardo di 8 ore nella rimozione? Ciò potrebbe causare problemi se accade spesso dopo lo sviluppo. – Pierce

+0

Ci possono essere ritardi, ma in genere solo pochi secondi. Non sono sicuro del motivo per cui hai visto 8 ore. – Paulw11

risposta

0

Questo è molto probabilmente un problema di autorizzazione.

L'eliminazione a cascata funzionerà solo se l'utente che cancella i record ha le autorizzazioni di "scrittura" per 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.

Vedere la mia risposta non: https://stackoverflow.com/a/38606004/6643055

Problemi correlati