NSAtomicStore et NSAtomicStoreCacheNode, qui a déjà  fait un backend CoreData ?

Salut la compagnie,



Je suis en train de jouer avec les NSAtomicStore et NSAtomicStoreCacheNode pour me faire un backend CoreData un peu spécial (en lien avec mon projet ObjectiveREST).



Malgré une doc un peu sommaire j'avance petit à  petit, cependant je but sur une chose aujourd'hui.



Je suis dans le lazy loading de mon NSAtomicStoreCacheNode, le moment où je dois charger l'objet réel au premier appel sur le NSManagedObject associé. Le système est assez simple puisqu'il suffit de lui passer un NSDictionary avec les clef / valeur.



J'ai un simple problème, comment dois-je représenter les relations ? Je suis à  une couche assez basse de CoreData ici et je n'ai pas accès à  un ManagedObjectContext assez haut dans la hiérarchie. Tout ce que j'ai c'est mon NSAtomicStore. Comment dois-je représenter une relation ici ? Je ne vois rien dans la doc à  ce propos...

Réponses

  • Ben je suppose que c'est à  toi de décider comment les représenter dans ton store. Il faut simplement que ton NSAtomicStoreCacheNode rende les attributs de type Relation comme un objet NSAtomicStoreCacheNode ou comme une collection.
  • yoannyoann Membre
    Yep, problème résolu, j'ai effectivement de relation représenté par des node. Maintenant je suis sur un autre problème, la sauvegarde avec validation de donnée. Mais j'ai la solution, reste plus qu'à  coder...



    On verra bien si tout ça fini par marcher ^^
  • yoannyoann Membre
    Bon, problème toujours d'actualité



    J'ai du lazy loading sur mes NSAtomicStoreCacheNode et forcément quand ça charge, mes NSManagedObject ne sont plus à  jour, comment faire pour les informer du changement sur le node associé ?
  • Je ne suis pas sûr de bien comprendre la question ...



    Hypothèse 1 : tu veux prévenir les NSManagedObject que les CacheNodes sont chargés et que donc ils peuvent prendre leurs valeurs.

    À mon avis ce n'est pas comme ça que ça marche. Les NSManagedObject interrogent plus ou moins directement les CacheNodes pour avoir les valeurs de leurs propriétés. Au moment où il est interrogé (valueForKey) il va chercher la valeur et la transmet.



    Hypothèse 2 : Le store est susceptible de "bouger" indépendamment des ManagedObjects, il faut alors les prévenir le cas échéant. Dans ce cas, je me tournerais vers le NSManagedObjectContext ; c'est lui qui gère la coordination entre les ManagedObjects et le ou les Stores.
  • yoannyoann Membre
    Problème résolu, cela venait d'une erreur entre entity et destinationEntity lors de la lecture de mes relations.



    Sinon pour répondre aux hypothèse.



    Un NSManagedObject est lié à  un NSAtomicStoreCacheNode, ce node inclus des mécanisme de lazy loading, c'est ce qui fait qu'un MO affiche fault dans les log tant qu'une clef n'a pas été lu.



    Quand le lazy loading se déclanche sur le node, le dictionnaire qui sert de modèle au MO est mis à  jour et automatique le MO suit (par KVO j'imagine).



    Mon problème venait simplement d'une erreur de lecteur de type qui foutait le bordel.





    Et sinon, vis à  vis du contexte, quand on travail sur les Atomic Store on est beaucoup trop bas pour remonter au contexte.



    Le code est disponible ici https://github.com/ygini/ObjectiveREST

    Pour le moment l'écriture ne marche pas mais la lecture oui.
Connectez-vous ou Inscrivez-vous pour répondre.