2015-06-20 11 views
12

Sto costruendo un'applicazione iOS con CloudKit.Deleted CloudKit records Reappear

Dovrebbe consentire a un utente di aggiungere, modificare ed eliminare Products nel cloud. L'utente può organizzarli in Cartelle. Queste cartelle sono solo altri tipi di record in cloudkit. Non vi è alcun limite ai livelli di cartella che l'utente può utilizzare, poiché qualsiasi cartella può semplicemente contenere un CKReference nella cartella principale. Tutte le comunicazioni CloudKit nella mia app avvengono in una classe CloudKitController dedicata

Tutto questo funziona, ma smette di funzionare dopo un po 'senza una chiara motivazione.

Quando eseguo il test della mia app, non ho nemmeno cartelle utente con profondità multiple. Tuttavia, dopo averlo usato per un po '(fino a una settimana), tutti i record cancellati sembrano riapparire su CloudKit. Un paio di note su questo:

  • Quando reimposta il dashboard CloudKit e ricominciare tutto da capo, funziona perfettamente. Non sono state apportate modifiche al codice.
  • Ovviamente, sto modificando costantemente il mio codice mentre l'app è in sviluppo. Tuttavia, in genere non modifico i tipi di dati nel mio codice che devono essere memorizzati in CloudKit. In seguito, questo problema non si verifica in seguito
  • Le modifiche nel CloudKit Dashboard (ad esempio l'aggiunta di tipi di dati) non causano questo problema
  • Non memorizzo alcun record localmente, come nei dati di base. Si siedono in un singleton finché io li uso
  • Quando vado a CloudKit Dashboard, il tipo di record prodotto mostra che ha per es. 13 istanze. A volte è così brutto, che la mia app ne carica più di 100. Posso anche vederli quando vado su recordZone, ma il RecordType dice che ha solo 13 istanze
  • L'eliminazione di questi record in CloudKit Dashboard li fa sparire solo per un mentre. Quando ricarico la pagina, si aprono di nuovo.

E 'stato così per un po' ora, e ho controllato il mio codice, la libreria Apple e google numerose volte ma non riesco a capire che cosa causa questo problema.

Domanda: Qualcuno saprebbe qualcosa su come superare questo problema? Come ho detto, mi sono imbattuto in questo per settimane, e resettare il mio cruscotto CloudKit lo "cura" solo per una settimana, poi si apre di nuovo. Sarei anche più che felice di pubblicare qualsiasi codice se questo ti aiuterebbe a rispondere alla mia domanda. Non ho pubblicato alcun codice inizialmente, in quanto non ho idea di quale codice possa causare questo.

Qualsiasi risposta sarebbe molto apprezzato

+0

Ho avuto lo stesso identico problema. Continuo a provare a eliminare uno dei miei tipi di record, ma i record torneranno dopo un po ', il che è problematico perché il tipo di record è effettivamente cambiato (il tipo di record mostra il cloudkit omette in realtà i campi che non erano comuni tra il vecchio e il nuovo). Come confuso. – Narwhal

+0

Buono a sapersi che almeno non sono l'unico. Nel tuo caso, questo problema si presenta dopo aver eseguito un'attività specifica nell'app o nel database? – Joris416

+0

Ho fatto un po 'di casino, quindi non ne sono sicuro. Ad ogni modo, ho resettato il database completamente, e ho continuato a dare da allora. Tuttavia, sarei riluttante a doverlo fare se molti dati sono stati già salvati (finora, nulla di ciò che ho salvato è stato importante e può essere eliminato). – Narwhal

risposta

2

Apple ha risposto a un bug report che ho archiviato che questo problema dovrebbe essere risolto con iOS 9.Finora sembra che questo problema non si sia verificato di nuovo, ma per favore fatemi sapere se questo disturba ancora qualcuno.

+2

Questo mi è appena successo. I record cancellati non sono visibili in Dashboard ma sono apparsi magicamente nella mia app. – DogCoffee

+0

Sì, ho anche solo perso 5 ore cercando un bug dalla mia parte. Il bug è ancora presente in IOS 9.3. Resettare l'ambiente di sviluppo risolto il problema ... – Prine

1

Questo potrebbe accadere perché la traccia cruscotto sotto suggerisce di Apple usa la tecnica Tombstone per la replica di eliminazioni attraverso un database distribuito. Uno dei nodi potrebbe avere un bug o una vecchia versione del software e sta sincronizzando il campo falso di tombstone su tutto il sistema, facendo in modo che il record si ripristini da solo. O forse qualcosa che sta facendo il tuo codice sta riportando casualmente questi record cancellati in vita? Una soluzione alternativa sarebbe utilizzare il proprio campo booleano di eliminazione parziale e vedere come si comporta.

[{ 
    "results": [{ 
     "tombstone": false 
     "id": "NewItem", 
     "etag": "ibgs5bpj", 
     "recordType": "Items", 
     "fields": { 
      "name": "Malc", 
      "location": { 
       "latitude": 38.0, 
       "longitude": -122.0 
      } 
     }, 
     "conflictLosersEtags": [], 
     "created": { 
      "timestamp": 1435514295943, 
      "user": "_0ac573ae502ca7ca9d763a84b27bc42a", 
      "device": "_2" 
     }, 
     "modified": { 
      "timestamp": 1435514295943, 
      "user": "_0ac573ae502ca7ca9d763a84b27bc42a", 
      "device": "_2" 
     } 
    }, 
    ... 

Per quanto riguarda i record, sì, anche i miei sono inaccurati.