Utilizzo di Core Data, iCloud e CloudKit per la sincronizzazione e il backup e come funziona insieme


111

Sono nelle prime fasi della creazione di un'app in cui vorrei salvare, sincronizzare e eseguire il backup dei dati. L'app non memorizzerà alcun file solo dati in un database. Sarà iOS 8 e versioni successive, quindi posso usare CloudKit. Ho fatto alcune ricerche e non mi è ancora chiaro come funzionano insieme Core Data, iCloud e CloudKit.

Per quanto ne so, CloudKit è solo un modo per ottenere e recuperare dati da / verso il cloud. CloudKit è solo un modo diverso di sincronizzare i dati con iCloud?

Le mie domande sono:

  1. Se utilizzo CloudKit, devo comunque creare un database di dati di base locale?

    • Se sì, verrà sincronizzato automaticamente con iCloud o dovrei chiamare metodi per archiviare in entrambi i luoghi?
  2. Se i dati sono archiviati solo nel cloud, l'utente sarà in grado di accedervi quando il dispositivo iOS non è connesso a Internet. Ho letto che CloudKit avrà solo una cache limitata.

  3. Come funzionerà se l'account iCloud non è abilitato.

Se qualcuno può in qualche modo scomporre ciò che ogni tecnologia fa nel processo di salvataggio e sincronizzazione del database di dati di base offline e online.

La mia comprensione attuale è:

  • I dati principali vengono utilizzati per archiviare i dati in locale

  • iCloud sincronizza i dati e li archivia nel cloud

  • CloudKit offre la possibilità di archiviare e gestire i dati nel cloud ??

Spero di aver fornito informazioni sufficienti perché questa domanda non venga chiusa.


2
Anche io non ho fatto molte ricerche su di esso, ma ho capito che non si conserva in locale. È qualcosa di simile al normale servizio client del server. Ecco perché senza Internet non puoi accedere al tuo DB. e come da Doc se l'utente non ha abilitato l'account icloud in quel momento, puoi solo leggere i dati dal contenitore pubblico
Sachin

@Yan che possiamo fare in questo modo si prega di suggerire, stackoverflow.com/questions/25600556/...
Nikunj

Risposte:


183

È così:

  • Core Data da solo, è completamente locale e non funziona automaticamente con nessuno dei servizi cloud di Apple.
  • Core Data con iCloud abilitato attiva la sincronizzazione tramite iCloud. Tutte le modifiche salvate in Core Data vengono propagate nel cloud e tutte le modifiche apportate nel cloud vengono scaricate automaticamente. I dati vengono archiviati sia in iCloud che in un file di archivio persistente locale, quindi sono disponibili anche quando il dispositivo è offline. Non è necessario scrivere alcun codice specifico per il cloud, è sufficiente aggiungere l'ascolto per le modifiche in arrivo (che è molto simile alle modifiche apportate su un diverso contesto di oggetti gestiti).
  • CloudKit non è correlato ai dati di base. Non è un sistema di sincronizzazione, è un sistema di trasferimento. Ciò significa che ogni volta che desideri leggere / scrivere dati cloud, devi effettuare chiamate API CloudKit esplicite per farlo. Niente accade automaticamente. CloudKit non memorizza i dati sul dispositivo, quindi i dati non sono disponibili se il dispositivo è offline. CloudKit aggiunge anche alcune funzionalità non disponibili a Core Data con iCloud, come i dati condivisi pubblici e la possibilità di scaricare solo una parte del set di dati invece dell'intera cosa.

Se si desidera utilizzare CloudKit con Core Data, è necessario scrivere il proprio codice personalizzato per tradurre tra oggetti gestiti e record CloudKit. Non è impossibile, ma è più codice da scrivere. Si potrebbe essere più affidabile, ma è troppo presto per dirlo con certezza.

Ho scritto un post sul blog che descrive CloudKit dal punto di vista di qualcuno che ha utilizzato Core Data e iCloud in passato.

Aggiornamento , giugno 2016: secondo la documentazione più recente perNSPersistentStoreCoordinator , tutto ciò che riguarda Core Data con iCloud è contrassegnato come deprecato. Di conseguenza dovrebbe probabilmente essere evitato per il nuovo sviluppo.


1
In passato ho avuto problemi con la corruzione durante l'utilizzo di Core Data con iCloud, ma non l'ho usato molto da quando è uscito iOS 7. Dovrebbe essere molto meglio. Con CloudKit è troppo presto per dirlo, dal momento che non è ancora ufficialmente rilasciato.
Tom Harrington,

3
@Tom Harrington - Potresti provare Core Data con iCloud per iOS 8 e farci sapere la tua impressione? Ho anche riscontrato molti problemi di corruzione in iOS 7 e il supporto Apple ha confermato molti bug. Spero che iOS 8 porti la sua affidabilità a un livello accettabile, ma mi piacerebbe sentire la tua
opinione

1
Dai un'occhiata a CKSIncrementalStore. github.com/CloudKitSpace/CKSIncrementalStore
Nofel Mahmood

3
"Non è necessario scrivere alcun codice specifico per il cloud, è sufficiente aggiungere l'ascolto per le modifiche in arrivo (che è molto simile alle modifiche apportate su un diverso contesto di oggetti gestiti)." - hai un esempio di codice / esempio su questo commento? Non ci sono esempi concreti che posso trovare :(
Ernest

1
@TomHarrington con quel tipo di feedback perché anche avere stackoverflow se tutto ciò che dobbiamo fare è controllare la documentazione :(
Ernest

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.