Savoir utiliser Core data

13

Réponses

  • uocramuocram Membre
    00:58 modifié #62
    Ton projet a-t-il déjà  marché chez toi?
    Si oui, après quelle manip a-t-il arrêté de fonctionner?
  • MiiMii Membre
    00:58 modifié #63
    dans 1232215195:

    Ton projet chez moi marche aussi...

    Dans ton projet, essaie de supprimer le fichier
    Films/build/Debug/Films




    Ah c'est pour ça que ça marche : Philippe49 m'avait demandé de supprimer le dossier build pour lui passer le code. ^^
    Sinon, non, il n'avait jamais fonctionné.
    Donc, pourquoi est-ce qu'en supprimant le build ça remarche ?
    Et pourquoi ça marche si l'appli est compilé en Anjou ?
  • Philippe49Philippe49 Membre
    00:58 modifié #64
    dans 1232215536:

    dans 1232215195:

    Ton projet chez moi marche aussi...

    Dans ton projet, essaie de supprimer le fichier
    Films/build/Debug/Films




    Ah c'est pour ça que ça marche : Philippe49 m'avait demandé de supprimer le dossier build pour lui passer le code. ^^
    Sinon, non, il n'avait jamais fonctionné.
    Donc, pourquoi est-ce qu'en supprimant le build ça remarche ?
    Et pourquoi ça marche si l'appli est compilé en Anjou ?


    Parce que c'est l'Anjou.
    Non plus séreiusement il doit traà®ner dans XCode une erreur qui a été commise au départ, et qui n'a pas été corrigée par les compilations suivantes.

    Donc en plus de la suppression du Build, tu peux aller dans le menu Build et faire exécuter l'option  "Clean All Targets" pour supprimer toute trace des compilations précédentes.
  • MiiMii Membre
    00:58 modifié #65
    Ok ! Et bien je retiens. ;-)
    Merci pour votre aide ! Je continue le tuto... ^^
  • uocramuocram Membre
    00:58 modifié #66
    Intéressant ce "clean all targets".

    Cela dit, c'est vrai que l'Anjou a plus d'un trésor...
  • AliGatorAliGator Membre, Modérateur
    janvier 2009 modifié #67
    Ouais, viendez en Anjou, c'est quand même un super coin... qui recelle de trésors... surtout rouges et alcoolisés  :p :p

    (Moi, chauvin ? Noann... Bon ceci dit, la Bretagne c'est bien aussi, je vais pas non plus dénigrer ma région d'adoption, surtout qu'on sait bien y boire aussi et que je suis pas prêt de vouloir quitter Rennes non plus ^^)
  • uocramuocram Membre
    00:58 modifié #68
    Il se dit que là -bas "on n'a jamais point soif!"  :p
  • CauplowaCauplowa Membre
    00:58 modifié #69
    Bonjour à  vous !
    je débute dans l'Objective-C et Cocoa et je fais ce super tuto. S
    Seulement voilà , je bloque.

    Je suis à  la création de la sheet (3e étape), l'application se lance mais les boutons "fermer" et "Afficher les types..." ne répondent pas... ou plutôt le bouton "Afficher les types" lance une action qui s'éternise (la petite roue de couleur tourne, tourne et tourne toujours...)

    j'utilise Xcode 3.1.1

    voici mes deux pages

    CodeEnStock_AppDelegate.h
    #import <Cocoa/Cocoa.h>

    @interface CodeEnStock_AppDelegate : NSObject
    {
        IBOutlet NSWindow *window;
    IBOutlet NSPanel *typesSujetsPanel;
       
        NSPersistentStoreCoordinator *persistentStoreCoordinator;
        NSManagedObjectModel *managedObjectModel;
        NSManagedObjectContext *managedObjectContext;
    }

    - (NSPersistentStoreCoordinator *)persistentStoreCoordinator;
    - (NSManagedObjectModel *)managedObjectModel;
    - (NSManagedObjectContext *)managedObjectContext;

    - (IBAction)saveAction:sender;

    - (void)openSheet:(NSWindow *)sheet; // méthode générique d'ouverture de Sheet
    - (IBAction)closeSheet:(id)sender; // action de fermeture générique de Sheet
    - (IBAction)showTypesSujets:(id)sender;


    @end


    CodeEnStock_AppDelegate.m (partie modifiée)
    #import "CodeEnStock_AppDelegate.h"

    @implementation CodeEnStock_AppDelegate

    - (void)openSheet:(NSWindow *)sheet
    {
    [NSApp beginSheet:sheet // La sheet que l'on veut afficher
    modalForWindow:window // IBOutlet NSWindow *window; dans la déclaration d'interface
    modalDelegate:self
    didEndSelector:@selector(endSel) //La méthode appelée à  la fermeture de la sheet
    contextInfo:NULL]; // Non utilisé ici
    [NSApp runModalForWindow:sheet];
    [NSApp endSheet:sheet];
    [sheet orderOut:self];
    }

    - (IBAction)closeSheet:(id)sender
    {
    [NSApp stopModal]; // l'application ferme la fenêtre modale située au premier plan
    }

    - (void)endSel
    {
    //NSLog(@\nend of sheet); // on peut faire afficher l'action dans le Run Log
    // mais on ne l'utilise pas
    }

    - (IBAction)showTypesSujets:(id)sender
    {
    [self openSheet:typesSujetsPanel]; // l'outlet que l'on a déclaré comme paramètre dans .h
    // de la fonction générique d'ouverture de sheet
    }
    ...


    Je ne trouve malheureusement pas mon erreur...  :why?:
  • Philippe49Philippe49 Membre
    avril 2009 modifié #70
    dans 1238861451:

    Je ne trouve malheureusement pas mon erreur...  :why?:

    En ce cas, point de mystère mon fils, reprend pas à  pas le détail de l'excellent tuto de Uocram, qui est de la plus pure sagesse, tu as sûrement oublié un truc : vérifie les connections dans IB, l'exact remplissage des inspecteurs dans IB, relie les quelques erreurs commises par ceux qui t'ont précédés dans ce post, et surtout reste calme ...  :'( osx-dev est avec toi :brule: 

    Autrement, tu peux utiliser la technique des mouchards : NSLog(@%@",objetQuonVeutRegarder);
    à  mettre sans restriction dans les méthodes appelées par l'action que tu déclenches et qui provoque la roulette de l'enfer.

    voir aussi les recommandations de l'auteur qui est en retraite actuellement dans un monastère tibétain.

    D'ailleurs que dire d'un homme qui a de telles citations :

    dans 1232218760:

    Il se dit que là -bas "on n'a jamais point soif!"  :p


    Un saint homme, un bonze, une référence monacale.
  • AliGatorAliGator Membre, Modérateur
    00:58 modifié #71
    Amen.
  • CauplowaCauplowa Membre
    00:58 modifié #72
    Ok merci.
    Je vais essayer de reprendre ça tête reposée...

    Y a-t-il des différences majeures dans la façon d'utiliser IB entre les dernières versions ?
  • Philippe49Philippe49 Membre
    00:58 modifié #73
    IB a changé il y a deux ans environ, mais depuis c'est stable, au graphisme près.
  • CauplowaCauplowa Membre
    00:58 modifié #74
    J'ai tout recommencé... toujours a même chose...
    il y probablement une étape qui me manque quelque part.

    Quand je fais Build and Go, l'application se lance. Mais déjà , ce sont deux fenêtre séparée qui s'ouvrent (j'ai vu que je pouvais cocher une option pour que mon Panel ne s'ouvre pas au démarrage). La panel n'est-il pas censé être "inclus" dans ma fenêtre principale ?

    Lorsque je clique sur le bouton "Afficher les types", j'ai toujours la même chose : moulinette...

    Une idée de là  où ça peut venir ?

    Merci
  • Philippe49Philippe49 Membre
    00:58 modifié #75
    Le panel est en sheet, et doit apparaà®tre en descendant sous la barre supérieure de la fenêtre. Il faut décocher effectivement l'option comme tu l'as fait.

    Quand à  savoir à  l'aveugle le détail que tu n'as pas fait, il n'y a que toi qui peut le trouver sur ton code.
  • CauplowaCauplowa Membre
    00:58 modifié #76
    Je ne comprend vraiment rien...
    Tous semble OK (les binds, ...).
    Je pense que le seul problème qui entraà®ne tous les autres est le fait que mon panel ne soit pas considéré comme "sheet".

    Puis-je envoyer à  l'un d'entre vous mon projet zippé afin de m'aider ?

  • Philippe49Philippe49 Membre
    avril 2009 modifié #77
    Envoie, on va regarder (supprime le dossier Build avant de zipper)
  • CauplowaCauplowa Membre
    avril 2009 modifié #78
    OK, j'envoie ça tout de suite.
    Le fait que ce soit des fichiers .xib et non .nib a-t-il une importance ?
    je suis parti du principe que s'était du à  la nouvelle mouture de la suite developer...

    [MAJ] c'est envoyé !
  • Philippe49Philippe49 Membre
    00:58 modifié #79
    dans 1238954017:

    OK, j'envoie ça tout de suite.
    Le fait que ce soit des fichiers .xib et non .nib a-t-il une importance ?

    Aucun problème
  • Philippe49Philippe49 Membre
    00:58 modifié #80
    Bien reçu, j'ai qu'un quart d'heure pour l'instant ... si je ne trouve pas je regarderais dans la soirée.
  • Philippe49Philippe49 Membre
    00:58 modifié #81
    Manifestement UOCram a transféré son fichier initial en site Web, et un gri gri s'est glissé à  la page Sheets. Il faut mettre (par exemple) :

    - (void)openSheet:(NSWindow *)sheet<br />{<br />	[NSApp beginSheet:sheet		//	La sheet que l&#39;on veut afficher<br />	&nbsp;  modalForWindow:window	// IBOutlet NSWindow *window; dans le déclaration d&#39;interface<br />		modalDelegate:self<br />	&nbsp;  didEndSelector:@selector(endSel)	// La méthode appelée à  la fermeture de la sheet<br />		&nbsp; contextInfo:NULL];	// Non utilisé ici<br />	[NSApp runModalForWindow:sheet];<br />}<br /><br />- (IBAction)closeSheet:(id)sender<br />{<br />	[typesSujetsPanel orderOut:self];<br />	[NSApp endSheet:typesSujetsPanel];<br />	[NSApp stopModal];	// l&#39;application ferme la fenêtre modale située au premier plan<br />}<br /><br />- (void)endSel<br />{<br />	NSLog(@&quot;&#092;nend of sheet&quot;);	// on peut faire afficher l&#39;action dans le Run Log<br />								// mais on ne l&#39;utilise pas<br />}
    



    D'autre part le panel doit être réglé ainsi :
  • CauplowaCauplowa Membre
    00:58 modifié #82
    ça marche !
    Mais alors, j'ai rien compris à  pourquoi le tuto présentait un telle erreur... Le code à  taper était pourtant sous la forme d'une image, donc non modifiable...

    Je continue mon avance !
  • Philippe49Philippe49 Membre
    00:58 modifié #83
    Le tuto initial n'avait pas d'erreur, mais il a du le réécrire sous la forme iWeb et mal recopié ... (avec iWeb, certains textes trop enrichis par des effets d'ombres, de reliefs, ... sont carrément mis sous forme d'images)
  • uocramuocram Membre
    00:58 modifié #84
    voir aussi les recommandations de l'auteur qui est en retraite actuellement dans un monastère tibétain.

    Le gros défaut des monastères thibétains est le thé au beurre rance qui ne peut rivaliser avec un "Vieilles vignes"  :p
  • Philippe49Philippe49 Membre
    00:58 modifié #85
    Oublions alors les Hautes Vallées de l'Himalaya ... et penchons nous sur les côteaux de bonne pente !  :p
  • uocramuocram Membre
    00:58 modifié #86
    dans 1238996422:

    Mais alors, j'ai rien compris à  pourquoi le tuto présentait un telle erreur...

    T'as raison! le beurre devait être plus que rance...

    Une solution "propre" et plus générique (utilisable pour traiter les méthodes de validation) pourrait être :
    <br />- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo<br />{<br />	if (returnCode == NSOKButton)	// si l&#39;utilisateur a validé<br />	{<br />		if (sheet == sheetIBOutlet1)	// si il y a plusieurs sheets dans l&#39;appli<br />		{<br />		}<br />		if (sheet == sheetIBOutlet2)<br />		{<br />		}<br />	}<br />	if (returnCode == NSCancelButton)	// si l&#39;utilisateur a annulé<br />	{<br />	}<br />&nbsp; &nbsp; [sheet orderOut:self];<br />}<br /><br />- (void)openSheet:(NSWindow *)sheet<br />{<br />	[NSApp beginSheet:sheet<br />	&nbsp;  modalForWindow:mainWindow<br />		modalDelegate:self<br />	&nbsp;  didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)<br />		&nbsp; contextInfo:NULL];<br />}<br /><br />- (IBAction)validateSheet:(id)sender<br />{<br />&nbsp; &nbsp; [NSApp endSheet:[sender window] returnCode:NSOKButton];<br />}<br /><br />- (IBAction)cancelSheet:(id)sender<br />{<br />&nbsp; &nbsp; [NSApp endSheet:[sender window] returnCode:NSCancelButton];<br />}<br /><br /><br />
    


    Et dans le tuto, à  ce moment là , tu peux utiliser indifféremment validateSheet: ou cancelSheet:

  • CauplowaCauplowa Membre
    00:58 modifié #87
    Ok, je prend note !

    Pour le moment, presque tout se passe bien, cependant il y a n truc un peu bizarre...
    Avant de passer à  l'étape "Customisons un NSArrayController", mes données étaient sauvegardées, ce qui n'est plus cas depuis cette étape ?

    est-ce normal ?
  • uocramuocram Membre
    00:58 modifié #88
    Ne rentre que très peu de données tant que tu n'as pas fini les modifications du dataModel. À chaque modification elles seront inutilisables et tu devras détruire le fichier de données (TonApp.xml dans ApplicationsSupport/TonApp) ce qui en créera un nouveau vierge et conforme au nouveau dataModel.
    Une autre possibilité de ne pas retrouver les données, c'est l'erreur de binding

  • lunairlunair Membre
    00:58 modifié #89
    dans 1170746286:

    Un super article d'uocram sur l'utilisation de Core Data.
    Pour aider de nombreux débutants à  utiliser Core Data, Jean-Marc a créé un tutorial pas-à -pas en HTML.

    A télécharger ici.


    Bonjour, merci de reposter le lien ça m'intéresse.
    Bon surf ;)

    Lunair.
  • sisopetronsisopetron Membre
    00:58 modifié #90
    dans 1170746286:

    Un super article d'uocram sur l'utilisation de Core Data.
    Pour aider de nombreux débutants à  utiliser Core Data, Jean-Marc a créé un tutorial pas-à -pas en HTML.

    A télécharger ici.


    Euh, il a disparu ce tuto ?  Il n'est plus accessible en tout cas.  Il est possible de corriger ça, parce que les bons tutos en français ne sont pas légions.  Merci d'avance.

    tata !
Connectez-vous ou Inscrivez-vous pour répondre.