web-dev-qa-db-fra.com

Utilisation de Core Data, iCloud et CloudKit pour la synchronisation et la sauvegarde et leur fonctionnement commun

Je commence à créer une application sur laquelle je souhaite enregistrer, synchroniser et sauvegarder des données. L'application ne stockera aucun fichier, rien que des données dans une base de données. Il va être iOS 8 et plus, donc je suis capable d'utiliser CloudKit. J'ai fait des recherches et je ne comprends toujours pas comment Core Data, iCloud et CloudKit fonctionnent ensemble.

Autant que de savoir, CloudKit n'est qu'un moyen d'obtenir et de récupérer des données dans/depuis le cloud. CloudKit est-il juste une façon différente de synchroniser des données avec iCloud?

Mes questions sont:

  1. Si j'utilise CloudKit, dois-je toujours créer une base de données de base principale?

    • Si oui, sera-t-il automatiquement synchronisé avec iCloud ou devrais-je appeler des méthodes pour stocker aux deux endroits?
  2. Si les données sont uniquement stockées dans le nuage, l'utilisateur pourra y accéder si le périphérique iOS n'est pas connecté à Internet. J'ai lu que CloudKit n'aura qu'une mise en cache limitée.

  3. Comment cela fonctionnera-t-il si le compte iCloud n'est pas activé?.

Si quelqu'un peut en quelque sorte décomposer le travail de chaque technologie dans le processus de sauvegarde et de synchronisation de la base de données de données principale hors ligne et en ligne.

Ma compréhension actuelle est:

  • Les données de base sont utilisées pour stocker les données localement

  • iCloud synchronise les données et les stocke dans le cloud

  • CloudKit donne la possibilité de stocker et de gérer des données dans le nuage?

J'espère avoir fourni suffisamment d'informations pour que cette question ne soit pas fermée.

105
Yan

C'est comme ça:

  • Les données de base, en elles-mêmes, sont complètement locales et ne fonctionnent automatiquement avec aucun des services de cloud d'Apple.
  • Les données de base avec iCloud activé activent la synchronisation via iCloud. Toutes les modifications que vous enregistrez dans Core Data sont propagées dans le nuage et toutes les modifications apportées dans le nuage sont automatiquement téléchargées. Les données sont stockées à la fois dans iCloud et dans un fichier de magasin persistant local. Elles sont donc disponibles même lorsque le périphérique est hors ligne. Vous n'avez pas besoin d'écrire de code spécifique au cloud, vous devez simplement ajouter l'écoute des modifications entrantes (ce qui ressemble beaucoup aux modifications apportées sur un contexte d'objet géré différent).
  • CloudKit n'est pas lié aux données de base. Ce n'est pas un système de synchronisation, c'est un système de transfert. Cela signifie que chaque fois que vous souhaitez lire/écrire des données dans le cloud, vous devez effectuer des appels explicites à l'API CloudKit pour le faire. Rien ne se passe automatiquement. CloudKit ne stocke pas de données sur le périphérique. Par conséquent, les données ne sont pas disponibles si le périphérique est hors ligne. CloudKit ajoute également certaines fonctionnalités non disponibles pour Core Data avec iCloud, telles que les données partagées publiques et la possibilité de ne télécharger qu'une partie de l'ensemble de données à la place de l'ensemble.

Si vous souhaitez utiliser CloudKit avec Core Data, vous devez écrire votre propre code personnalisé pour la traduction entre les objets gérés et les enregistrements CloudKit. Ce n'est pas impossible, mais c'est plus de code à écrire. Cela pourrait être plus fiable, mais il est trop tôt pour le dire avec certitude.

J'ai écrit n article de blog décrivant CloudKit du point de vue de quelqu'un ayant déjà utilisé Core Data et iCloud.

Mise à jour , juin 2016: à compter de la documentation la plus récente pour NSPersistentStoreCoordinator , tout ce qui concerne les données de base avec iCloud est marqué comme obsolète. En conséquence, il devrait probablement être évité pour les nouveaux développements.

179
Tom Harrington