# Core Data XCode 4



## Vampyre (30 Mai 2011)

Et rebonjour à tous !

Et bien m'y voilà, je bloque... Ayant appris le language Objective-C, je suis maintenant occupé à comprendre comment fonctionne XCode 4 et Objective-C. Je m'en suis pour l'instant pas trop mal tiré, mais j'avoue rencontrer un gros problème de compréhension lorsque j'essaye d'appliquer Core Data. 

J'ai essayé de trouver des tutoriels qui montreraient par l'exemple le fonctionnement de Core Data. Evidemment, étant sous XCode 4, les écrans ont quelque peu changé, et je dois parfois fouiller pour trouver l'équivalent. J'avais trouvé me semblait-il un tutorial bien expliqué (enfin!) sur Core Data... J'en ai plein dans les bouquins, mais ils se basent tous sur une procédure qui n'existe plus du tout sous XCode 4 : la création automatique de l'interface avec un core data défini. Bref, pas moyen de option-cliquer, drag & drop, et avoir une fenêtre d'interface de manière automatique. Il faut tout faire à la main... Mais quand on ne comprend pas comment intégrer les uns et les autres, cela devient très dur à suivre.

Finalement, j'ai trouvé ce tuto vidéo (http://developer.apple.com/cocoa/coredatatutorial/index.html) sur le site d'Apple, basé sur XCode 2, mais qui explique les étapes manuelles.

Tout en cherchant dans le nouveau XCode 4 l'équivalent des fenêtres XCode 2, j'ai, je pense avoir suivi correctement le tuto jusqu'au chapitre 7. Le chapitre 7 me demande de build @ go, pour tester. Et là, cela foire. J'ai un rapport de bug assez impressionnant... Etant donné qu'il n'y a pas de code, j'aurai du mal à vous montrer le code source.

Bref, tout ceci pour demander si vous connaissez quelques tutos Xcode 4, qui expliquent la manière d'utiliser Core Data correctement ?

Grand merci à vous pour vos suggestions


----------



## Rez2a (30 Mai 2011)

Salut, j'ai pas trop compris ton problème de "création d'interface automatique", tu parles des .h/.m des classes de ton modèle ?
Pour Core Data sous Xcode4, ce n'est pas bien compliqué, il faut sélectionner ton modèle de données (.xcdatamodeld), puis tu ajoutes les entités via Add Entity, leurs attributs avec Add Attribute (jusque là, rien de compliqué), puis tu génères les classes correspondantes via File -> New -> Core Data -> NSManagedObjectSubclass.


----------



## Céroce (30 Mai 2011)

Ma suggestion, c'est de laisser tomber Core Data pour l'instant. C'est une techno vraiment utile, mais vraiment complexe. Apple a toujours voulu nous faire croire que ça fonctionnait tout seul, justement en glissant le data model dans le xib et ça pondait toute l'IHM. Ça ne fonctionne que pour des cas bien encadrés.
Je n'ai pas essayé de glisser le data model dans le xib sous Xcode 4. Ils l'ont peut-être viré. De toute façon, c'était un gadget, inutilisable pour une vrai appli.

En vérité, il n'y a rien de magique, Core Data s'appuie sur une BdD SQLite et permet de retranscrire les tables sous formes d'objets (NSManagedObject). Il y a plein de détails qui rendent les choses délicates si on n'a pas une connaissance approfondie de Cocoa. Par exemple, faire une simple requête exige 10 lignes de code avec 5 classes qui interviennent.
Et en général, c'est très difficile à déboguer.

Ceci dit, t'y intéresser t'apprendra beaucoup de choses sur Cocoa, alors je te conseille le tutoriel appelé _Core Data Utility Tutorial_. Il couvre l'essentiel des classes qui constituent Core Data. Malheureusement, on n'y voit pas comment charger des données depuis le modèle, alors que c'est souvent à ce moment qu'on a des problèmes (la sauvegarde fonctionne souvent facilement).

En dehors de Core Data, il y a les Bindings qui font le lien entre les vues et le modèle Core Data. Les technos, Key-Value Coding et Key-Value Observing sont plus simples, mais il faut les maîtriser sur le bout des doigts et le KVO a été conçu un peu à la va-vite. Le réglage des bindings sous IB est laborieux et les risques d'erreur importants. Il vaut mieux apprendre les bindings séparément de Core Data.

Pour finir sache, qu'il n'existe pas de doc sérieuse sur Core Data hormis celle d'Apple, qui s'est beaucoup améliorée, mais qui nous noie toujours sous les détails. On parlait il y a 2 ans de la sortie d'un bouquin&#8230; on attend toujours. Dans un sens, ça ne m'étonne guère: il y a trop de détails du fonctionnement qui ne peuvent être connus que des gens d'Apple.


----------



## Vampyre (30 Mai 2011)

Okido, 

Merci, je vais aller voir le tuto suggéré... Même si je ne m'attendais pas à utiliser le formulaire automatique, les bouquins, eux, ne font qu'en parler... et ne donnent pas l'alternative manuelle (j'ai vérifié 5 ou 6 livres pour l'instant).

Bref, en gros, plonger dans la doc... Mais je vais y plonger, car je trouve le concept intéressant pour gérer des données style database... Et surtout pouvoir utiliser ces données...

Merci pour ces conseils, je retrousse mes manches, et j'y plonge !

---------- Nouveau message ajouté à 20h34 ---------- Le message précédent a été envoyé à 18h59 ----------

Ca y est ! J'ai trouvé un tuto pour XCode 4 et démontrant le Core Data... Personnellement, je ne le trouve pas si compliqué que cela (il faut bien sûr avoir déjà compris à quoi sert le reste du code)... Peut-être est-ce car je ne connais aucune autre méthode d'accès aux données que je ne fais pas de comparaison...

Si cela intéresse quelqu'un, bien que cela soit dirigé pour des applications iPad, j'ai trouvé ce tuto (en fait le bouquin est en ligne, mais on peut l'acheter... C'est apparemment l'auteur qui en a donné l'autorisation. Si j'ai fait erreur, et que ce lien est illégal, n'hésitez pas à me censurer...)

Le code est fonctionnel et montre une toute petite application permettant d'encoder trois champs, et de sauvegarder ou rechercher dans les noms. La procédure pour l'interface est ici entièrement manuelle (XCode 4 oblige), et le code fonctionnel à 100% sans bug.

Suite à mon premier post, j'ai maintenant compris pourquoi le tuto XCode 2 ne fonctionne plus. Il y a une couche supplémentaire par rapport à ce tuto, et donc on arrive forcément avec le managed object context en erreur.

Une fois le principe de ce tuto compris, j'imagine qu'il est alors similaire pour toutes les applis, qu'elles soient mac et iphone / ipad.

Voici le tuto en question : 

Merci pour ta réponse, et à bientôt (


----------



## Nyx0uf (30 Mai 2011)

Pour Core Data y a le bouquin de Marcus Zarra qui est pas trop mal : http://www.amazon.com/Core-Data-App...6328/ref=sr_1_2?ie=UTF8&qid=1306786910&sr=8-2

Pour Core Data, autant commencer directement avec, c'est clairement moins chiant que de se servir directement de sqlite3.
En plus sur iPhone la classe NSFetchedResultsController permet de simplifier pas mal de chose pour bien des cas 

Sinon, ça me fait bien marrer les nioubs qui se pleignent d'un changement d'interface logiciel, c'est la nouvelle mode ?
Sérieusement arrêtez de coder. la prog ça a jamais été facile, ça demande du boulot de l'investissement, alors si tu bloques parce que l'interface du soft change ça sera quoi par la suite..?


----------



## Vampyre (31 Mai 2011)

Merci également pour ta réponse... Mais je tiens simplement à ajuster tes dires... nulle part je ne me suis plaint d'un changement d'interface... Ne connaissant pas l'ancienne, je n'ai d'ailleurs rien à ne plaindre... Et ne t'inquiètes pas, je n'ai pas commencé l'apprentissage de XCode et Objective C d'hier, mais il y a bien des mois... Du temps et de l'investissement...

Par contre, ma plainte, qui elle est bien réelle, c'est que aucun bouquin, mis à part celui que je viens de parler, n'explique les choses clairement. A part cela, tous les livres que j'ai pu trouver pour l'instant, et qui parlent de core data prennent tous la facilité de la création automatique, alors qu'il eut été plus instructif d'en décrire la méthode manuelle... C'est plus celà que je critique plus qu'un changement d'interface. 

Sans référence correcte, je ne peux malheureusement pas comprendre comment cela fonctionne, ni même en analyser les résultats étant donné que c'est une méthode non reproductible...

Mais merci de ta réponse  Je vais voir cela de ce pas...

@Rez2a : Oups, mille excuses, je n'avais pas vu ton post. Petite explication. Dans les bouquins que j'ai, lorsque l'on en arrive au core data, une fois la création faite de core data, je n'avais pas trouvé de livre expliquant comment utiliser les binder pour lier le core data à l'interface. En lieu et place, la méthode indiquait ceci : option-click and drag le core data vers IB, chose qui n'existe plus. La génération automatique de l'interface était invoquée, mais aucun n'indique ce qui est créé, ni même comment ils sont liés les uns aux autres. Bref, sans description de quel objet a été utilisé et pourquoi, je m'en retrouvais totalement bloqué, et incapable de comprendre comment fonctionnait core data. Voilà pour la petite explication.


----------



## Céroce (31 Mai 2011)

Nyx0uf a dit:


> Pour Core Data y a le bouquin de Marcus Zarra qui est pas trop mal : http://www.amazon.com/Core-Data-App...6328/ref=sr_1_2?ie=UTF8&qid=1306786910&sr=8-2



Je ne connaissais pas le bouquin (il a fini par sortir !).
D'après les commentaires des lecteurs, le livre ne traite même pas de NSPersistentDocument et parle à peine de NSPredicate, alors que lancer des requêtes, c'est un peu ce qu'on demande à une une BdD !

Je ne l'ai pas lu, mais j'ai un gros a priori négatif.

---------- Nouveau message ajouté à 09h52 ---------- Le message précédent a été envoyé à 09h44 ----------




Vampyre a dit:


> Ca y est ! J'ai trouvé un tuto pour XCode 4 et démontrant le Core Data... Personnellement, je ne le trouve pas si compliqué que cela (il faut bien sûr avoir déjà compris à quoi sert le reste du code)... Peut-être est-ce car je ne connais aucune autre méthode d'accès aux données que je ne fais pas de comparaison...



Le modèle de données de l'exemple est super simple: une seule table, que des Strings.
Essaie juste d'ajouter un nombre et d'utiliser des accesseurs utilisables dans une vraie appli, c'est à dire qui utilisent des float et pas des NSNumbers.


----------



## Nyx0uf (3 Juin 2011)

Pour info y a ce bouquin qui vient de sortir pour iOS & Core Data : http://www.informit.com/store/product.aspx?isbn=0321670426

Je ne sais pas ce que ça vaut par contre.


----------

