Graphique à partir de CoreData ?
crocodil
Membre
Bonjour !
Toujours débutant en programmation malgré quelques essais, je suis en train de créer une application pour les apiculteurs, permettant de garder une trace des diverses actions effectuées au rucher ...
Pour l'instant tout marche à merveille, j'ai commencé avec xCode avec un architecture core Data (j'ai enfin compris comment faire marcher le tout ;D) ...
j'ai tout de même quelques questions, pour commencer :
Dans mon fichier xcdatamodel, j'ai une entité nommée "Rapport" deux de ses attributs sont "rapport" (du simple texte) et "RapportDate" (une date du calendrier).
J'aimerais pouvoir faire un graphique à partir de ces données; un graphique avec les dates en abscisse et les rapports sous forme de points sur les bonnes dates par exemple...
Je pense que Quartz doit être la solution, mais comment dire à Quartz d'aller chercher les données stockées dans la base de donnée coredata ? Je ne trouve pas grand chose sur la toile à ce sujet ...
Je suis dans le bon ? ::)
bonne journée !
Toujours débutant en programmation malgré quelques essais, je suis en train de créer une application pour les apiculteurs, permettant de garder une trace des diverses actions effectuées au rucher ...
Pour l'instant tout marche à merveille, j'ai commencé avec xCode avec un architecture core Data (j'ai enfin compris comment faire marcher le tout ;D) ...
j'ai tout de même quelques questions, pour commencer :
Dans mon fichier xcdatamodel, j'ai une entité nommée "Rapport" deux de ses attributs sont "rapport" (du simple texte) et "RapportDate" (une date du calendrier).
J'aimerais pouvoir faire un graphique à partir de ces données; un graphique avec les dates en abscisse et les rapports sous forme de points sur les bonnes dates par exemple...
Je pense que Quartz doit être la solution, mais comment dire à Quartz d'aller chercher les données stockées dans la base de donnée coredata ? Je ne trouve pas grand chose sur la toile à ce sujet ...
Je suis dans le bon ? ::)
bonne journée !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le cube G4 à de bonnes dimensions pour lui mettre des petits cadres à l'intérieur ;D
Ce n'est pas faisable de faire une ligne du temps comme je la souhaite de manière pas trop compliquée ?
Bon désolé, ca fait pas avancer ton sujet...
J'ai malheureusement pas la réponse...
pour ce que tu veux faire il faut suivre le modèle MVC préconisé par Apple. Tu as donc ton modèle (tes données) qui correspond à Core Data et ta vue qui va ce servir de Quartz.
Entre les deux tu as besoin d'un Controller qui permette de maintenir la cohérence entre ta base Core Data et ton affichage.
As tu essayé le tuto d'Apple sur Core Data?
Et sinon à propos d'Apiculture, tu es toi même Apiculteur? Tu es de quelle région?
Allo docteur, maman bobo ?
Pour répondre à la question, comme la dit Greensource c'est à toi d'intéoriger CoreData pour réucpérer les données brutes, les mettres en forme et les affiché dans ta vue, tu peut utiliser plein de techno pour ça, CoreAnimation ou même les NSView en font partie.
En tout cas je confirme, c'est un joyeux bordel ^^
Bravo les gars!
Je termine les différents bindings restant et je vous montre
Oui, apiculteur débutant, en Belgique 8--)
Je faisais fausse route en cherchant à utiliser Quartz donc, je vais regarder de ce côté alors
Non non, je ne fuis pas
Mais en tant que grand débutant, je ne maitrise malheureusement pas encore le code, il me faut un peu de temps avant de bien comprendre :-p pour l'instant je n'en ai pas encore écrit pour cette application, je me suis basé sur le tuto d'Apple http://developer.apple.com/cocoa/coredatatutorial/index.html où c'est fort visuel :-) Mais je me doute que le code est indispensable dès que l'on veut aller plus loin ! Je n'hésiterai pas à m'y plonger sous vos bons conseils/explications ;-)
Comme je le disais plus haut, dès que les différents boutons,champs de texte et tableView marchent, je vous montre
Merci pour toutes vos réponses !
Non, c'est de la culture télévisuelle, faut juste avoir regardé les épisodes de Dr Who pour comprendre.
Au temps pour moi alors :-p
J'avoue que ça ressemblais plus à un Kamoulox qu'autre chose ^^
Voici un screenshot du fichier .xcdatamodel :
Je ne pense pas que ce soit très propre; j'ai essayé auparavant de faire différentes entity : Ruche, Date, Miel, Pollen, ... et de leur associer les différents array controller, mais j'étais confronté à un problème:
quand je sélectionnais une ruche, les dates lui correspondant étaient bien affichées, mais en sélectionnant une de ces date, rien ne changeait dans les texfield raccordés au mielcontroller (tout le temps affiché "no selection").. J'avais pourtant mis une contrainte content set sur le mielController pointant vers la relation miel de l'entity Date (je ne sais pas si je m'exprime assez clairement...)
Pour ce qui est de l'interface, je n'en suis pas satisfait... Je réfléchis à une présentation plus utile et efficace, j'aimerais remplacer le tableau contenant la liste des ruches par quelque chose de plus visuel, dans le genre d'un IKImageBrowserView, mais je ne sais pas encore comment l'utiliser , et on vite fait de se perdre avec toutes les possibilités ...
Je me suis tout de même permis de poster pour vous montrer l'avancement, et pour bénéficier de votre inspiration du moment
J'attaquerai la partie "graphique" ensuite
merci et bonne journée !
Par contre au niveau de ta conception, je pense que c'est une erreur d'avoir tout regroupé comme cela, ton découpage initial était le bon. Il faudrait mieux cherché à résoudre ton erreur plutôt que de tout regrouper comme cela. Pour l'évolution de ton programme tu risques d'être handicapé sinon.
Pierre
Enfin comme le dit Yoann, il faut aller lire les infos dans ta base CoreData, et faire toi-même la traduction graphique.
sous vos conseils bienveillants, je recommence la structure du .xcdatamodel...
J'en ai profité pour revoir complètement l'apparence du logiciel..et ses fonctions...
Merci beaucoup Phillippe49 pour le lien, je regarderai cela de plus près une fois les premières étapes passées... Je pense que je visais trop loin pour un premier coup...
Je suis pour l'instant confronté au même problème que précédemment, je m'explique;
Quand je sélectionne une ruche (dans un tableau), j'ai accès aux dates qui la concernent ça c'est ok
ce que je n'arrive pas à faire c'est accrocher une information à une date (qui serait donc liée à une ruche particulière)... Que ce soit une info concernant les cadres, la récolte ou un traitement !
voici un screenshot :
voici les différents bindings de 3 entity reliées entre-elles :
l'entity Ruche :
l'entity Date :
et l'entity Cadre :
Je pense que le problème doit être situé au niveau de l'entity Cadre, mais je sèche ...
Voici aussi l'état actuel de l'application pour vous donner une idée :
iBee
Dans la partie Cadres du tab "Edition" je compte mettre une image de cadre par cadre présent dans la ruche, avec la possibilité de cliquer dessus pour changer l'état du cadre afin d'indiquer son contenu (couvain (=oeufs), pollen, miel, cellule royales, cellules de mâles,...)
La "vue générale" comprendrait quant à elle les différentes ruches sous forme des cadres imagés avec les dernières informations en date (qui auront été rentrées dans la partie édition auparavant)... Je vous demanderai certainement de l'aide plus tard, mais chaque chose en son temps :-))
Un tout grand merci !
(Mes questions s'éloignant de celle d'origine, devrais-je créer un nouveau topic plus général sur mon application dans le bon forum ?)
Merci
Un petit coup de pouce de quelqu'un ?
[size=8pt]Je suis sûr que ce n'est pas d'un niveau très élevé et que mes questions peuvent sembler/être basiques...mais je veux bien faire...[/size]
Soit, j'ai trouvé une piste supplémentaire; en faisant un projet de test, je suis arrivé à avoir 3 entités avec la structure que je recherche; c'est à dire une entity 3 qui dépend d'une entity 2 qui elle même dépend d'une entity 1. J'avais oublié de cocher le bouton "Validate immediatly" pour les array Controller ...
Le problème actuel est le suivant :
L'entity Cadres dépend de l'entity Date (il y a un content set, de sorte à ce que l'entity Cadres n'affiche que les données pour la date sélectionnée).
Une entity Date est crée en appuyant sur un bouton "+" et on la voit apparaà®tre dans une NSTableView...
Il faudrait qu'une entity Cadres soit crée automatiquement dès qu'une entity Date est crée, afin de pouvoir y stocker des données mais je ne vois pas encore comment faire ...
Il serait évidemment plus facile de mettre tous les attributs de l'entity Cadres comme attributs de l'entity Date pour qu'ils soient directement prêts à être remplis d'informations dès la création de l'entity Date, mais ce ne serait pas très propre...
Si quelqu'un voit quel est le bouton magique, ...
Je te suggère de créer dans l'appDelegate une méthode addDate. Il te faut bien sûr éventuellement des outlets qui pointent vers tes NSArrayController d'interface builder afin d'attribuer des choses utiles à ta nouvelle "Date" (du genre, la ruche selectionnée)
Tu connectes ton bouton + à cette méthode addDate.
La méthode serait quelque chose de style :
J'ai testé sur un mini projet, cela fonctionne.
Le gros avantage de CoreData est le maintient automatique des relations (pas besoins de se prendre la tête à faire des set... à chaque création d'un objet pour mettre à jour des données). L'autre avantage est la gestion des règles de validation.
Sinon, j'utilise plutôt des structures plus classiques et j'use et abuse des NSDictionary => La plupart de mes structures de données ne sont que des dictionnaires ! (il ne sert à rien de subclasser NSObject pour finalement créer ce qu'un NSDictionary fait déjà très bien !). Mais il est vrai que le maintient des relations (notamment inverses) est plus galère qu'avec CoreData.
Juste une petite remarque : j'ai l'impression que tu confonds différentes choses. Les screenshots que tu montrent indiquent les inspecteurs IB des CONTROLEURS, pas des ENTITES comme tu le mets en titre. Tu ne touches en rien à la structure de données en bidouillant les paramètres ici. Ce que tu configures c'est une instance de la classe NSArrayController, qui aura pour fonction, puisque tu est en mode "Entity" avec managedObjectContext, de pouvoir te retourner un NSArray de NSManagedObjects qui correspondent à l'entité que tu as mis dans "Entity" de l'inspecteur, et de maintenir un pointeur vers un NSManagedObject (ou un tableau si la sélection multiple est autorisée) qui sera la "selection". le controleur n'est pas le tableau de données !.
Je pense qu'il faut tu tu prennes le temps de réfléchir sur la notion de paradigme model-view-controller. Une VUE ne "stocke" pas de donnnées, elle affiche des choses et elle répond à des évènements (clic, touche pressée...). Elle interroge un CONTROLEUR pour savoir quoi afficher où. C'est là que des contrôleurs tout faits sont disponibles (NSArrayController et NSObjectController), et que les bindings te font gagner énormément de temps, mais il faut avoir derrière la tête une bonne idée précise de comment les choses se passent concrètement, sinon les boulettes sont assurées. Les controleurs "clés en main" ne sont évidemment pas suffisants, et il faut créer sont petit controller à soit, avec des méthodes persos qui permettent de "customiser" le comportement de l'application (c'est ici ton cas, puisque tu veux que telle action en entraine une autre..). L'idée est de ne pas réinventer la poudre et d'utiliser ce qu'Apple nous fourni gracieusement. Enfin, le controleur va agir sur les DONNEES : il va y accéder à la demande d'une vue pour affichage, ou il va les modifier... à la demande d'une vue (champ de texte venant d'être édité, bouton cliqué ...). Le controleur (ce que tu bidouilles dans tes screenshot) est donc le flic de l'application qui fait l'intermédiaire entre les vues et les données. Le controleur ne "stocke pas" les données, il y accède. La couche DONNEES de la plupart de mes applications est relativement limités puisqu'elle se contente de NSDictionary et de NSArrays, je n'ai donc quasiment jamais pas de classe perso de la couche DONNEES.
J'espère ne pas avoir dit trop de bêtises et d'avoir été clair...
Bon courage.
Merci beaucoup Mick pour tes explications claires et précises, je comprends mieux à présent
J'ai réussi à implémenter ton code dans un mini-projet, et cela fonctionne , je pense avoir fait un bon pas... je devrais réussir à l'appliquer aussi dans iBee...
Un tout grand merci , je vous tiens au courant...