<br />// ancien code inactivé :<br />// url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]];<br /><br />// à remplacer par ce nouveau code qui teste la phase de développement stockée dans une préférence de l'application en cours de création,<br />// préférence de clé @"PhaseDebug",<br />// pour proposer un dialogue permettant le choix de supprimer ou non le fichier @"MyApp.xml" à l'ouverture de l'application :<br /> if ([[[[NSUserDefaultsController sharedUserDefaultsController] values] valueForKey:@"PhaseDebug"] boolValue] == YES)<br /> {<br /> NSString *path = [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]; <br /> NSInteger choice = NSRunAlertPanel(@"Supprimer le fichier .xml?", @"Supprimer le fichier \"%@\" definitivement.", @"Ne pas Supprimer", @"Supprimer", nil, [path lastPathComponent]);<br /> if (choice == NSAlertAlternateReturn) // on supprime<br /> {<br /> if (![[NSFileManager defaultManager] removeFileAtPath:path handler:nil])<br /> NSRunAlertPanel(@"Erreur fichier", @"Le fichier %@ n'existe pas ou ne peut etre supprime", @"OK", nil, nil, path);<br /> }<br /> url = [NSURL fileURLWithPath: path];<br /> }<br /> else<br /> {<br /> url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]];<br /> }<br />
Créer une préférence que l'on teste, n'est pas indispensable, commenter/décommenter le code suffit. On aussi peut imaginer copier d'abord le fichier @MyApp.xml (en lui ajoutant l'heure comme suffixe, p.e.) dans un dossier de sauvegarde, avant de le supprimer du dossier support aux applications.
Je reviens sur le sujet. Plutôt que d'utiliser une variable "debugPhase" dans le fichier de préférences ne serait-il pas mieux, si c'est possible, de le faire avec une compilation conditionnelle en fonction de la phase.
1) J'ai pas encore pu essayer car j'ai pas de mac sous le code là 2) Je me demande comment faire en sorte qu'il prenne la phase en cours dans mon projet plutôt que de devoir la définir dans un
<br /> #ifdef DEBUG<br /> NSString *path = [applicationSupportFolder stringByAppendingPathComponent: @"Carsok.xml"]; <br /> NSInteger choice = NSRunAlertPanel(@"Supprimer le fichier .xml?", @"Supprimer le fichier \"%@\" definitivement.", @"Ne pas Supprimer", @"Supprimer", nil, [path lastPathComponent]);<br /> if (choice == NSAlertAlternateReturn) // on supprime<br /> {<br /> if (![[NSFileManager defaultManager] removeFileAtPath:path handler:nil])<br /> NSRunAlertPanel(@"Erreur fichier", @"Le fichier %@ n'existe pas ou ne peut etre supprime", @"OK", nil, nil, path);<br /> }<br /> url = [NSURL fileURLWithPath: path];<br /> #else<br /> url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"Carsok.xml"]];<br /> #endif<br />
Sans oublier de mettre dans les "projects settings" --> "Preprocesssor macros" : "DEBUG" pour la conf de debug. Pour la conf. de release j'en ai profité pour mettre "RELEASE"
Je commence tout juste à développer des applis pour Mac, et je me suis mise à ce petit tuto, et biensur j'ai un petit problème ^^ . J'ai fini la phase "Interface" et je ne récupère pas les données précédemment entrées en rouvrant l'application.
Allez, je suis sûre que c'est un problème facile pour qui s'y connaà®t mieux que moi, une idée ??
Je commence par là parce que je voulais manipuler une base de données, mais je vais faire un peu le tour de tout les horizons . Et si, la case est bien cochée. Une autre suggestion ?
Il faut reprendre pas à pas toute l'interface, comme dit Céroce, les connexions, les cases cochées, les définitions des entities , ton problème vient surement d'un détail mal réalisé. Quand à ce que dit Céroce sur le fait que commencer Cocoa par CoreData est une approche très réductrice, je confirme entièrement, bien que ce dernier soit une très belle technologie par ailleurs (Coredata pas Céroce).
• Connections entre les +/- et le NSArrayController correctement réalisées (faire un clic droit sur le NSArrayController et les Received Actions add et remove doivent être opérationnels)
Après, il suffit de taper sur +, cliquer sur la table view , et saisir le nom du sujet
Hello! 4 vérifications qui peuvent aider à diagnostiquer : 1- y a-t-il des données de stockées? : ouvrir dans TextEdit le fichier moi/Bibliothèque/Application Support/MaBase/MaBase.xml (document xml contenant la database et les database infos) 2- y a-t-il une alerte au démarrage de l'appli. du genre "les données ne correspondent pas au datamodel"? (si oui, il faut bazarder le fichier cité ci-dessus et rentrer de nouvelles données avec le nouveau datamodel, celui contenant les modifications de structure faites depuis la première entrée de données, ce qui créera un nouveau fichier de données) 3- dans la fenêtre Debugger Console y a-t-il une ou des alertes (dont le texte orienterait sur l'anomalie qui bloque l'affichage des données, qui est le plus souvent une erreur d'orthographe ou de casse sur une Entity, un Attribut ou une Relationship, le texte montrant le plus souvent la mauvaise orthographe en disant que ce n'est pas key value coding compliant)? 4- dans l'interface, les colonnes de la table où doivent s'afficher les données, sont-elles bien bindées sur les NSTableColumn et non pas sur : NSScrollView ou NSTableView ou NSTextFieldCell et vers le bon NSArrayController pour le Bind To (attention : quand on copie un élément ou qu'on le duplique, tous les bindings et toutes les connections sont supprimées dans la copie, heureusement d'ailleurs). Le NSArrayController est-il bien Bind To le "MaBase_AppDelegate" pour un Model Key Path : ManagedObjectContext
- je pense avoir respecté les minuscules/majuscules, - les bindings sont cochés, - les connections entre le NSArrayController et les boutons sont faites.
1/ il n'y a pas de données enregistrées dans la base 2/ pas d'alerte au démarrage de l'appli 3/ Debugger Console vide 4/ bind sur NSTableColumn vers le bon NSArrayController qui bind to le bon AppDelegate avec comme Model Key Path ManagedObjectContext.
J'ai refait rapidement cette partie du tuto, cela marche nickel. Voilà un cas bien intéressant 8--) Poste donc ton code qu'on regarde directement (Options supplémentaires, supprime le dossier Build pour alléger et compresse)
C'est ce que je pressentais, prépares-toi à du lourd ....
[move] <span style="color:purple">[size=18pt]L'interface elle marche parfaitement ![/size] [/move]<br />
Il faut taper sur + pour ajouter des données, et ce que tu tapes s'enregistre automatiquement dans la bibliohèque <ton nom de sesion>/Bibliotheque/Application Support/Films
Réponses
Dans MyApp_AppDelegate.m, modifier comme suit :
Créer une préférence que l'on teste, n'est pas indispensable, commenter/décommenter le code suffit.
On aussi peut imaginer copier d'abord le fichier @MyApp.xml (en lui ajoutant l'heure comme suffixe, p.e.) dans un dossier de sauvegarde, avant de le supprimer du dossier support aux applications.
J'ai trouvé, cela ce passe par ici :
/Users/nomutilisateur/Biliothèque/Préférences/com.yourcompany.application.plist
Et il faut rajouter une entrée de nom "PhaseDebug" de type "Boolean" avec "YES" comme valeur avec Property List Editor.
Plutôt que d'utiliser une variable "debugPhase" dans le fichier de préférences ne serait-il pas mieux, si c'est possible, de le faire avec une compilation conditionnelle en fonction de la phase.
Je pense à quelque chose comme cela :
1) J'ai pas encore pu essayer car j'ai pas de mac sous le code là
2) Je me demande comment faire en sorte qu'il prenne la phase en cours dans mon projet plutôt que de devoir la définir dans un
Sans oublier de mettre dans les "projects settings" --> "Preprocesssor macros" : "DEBUG" pour la conf de debug.
Pour la conf. de release j'en ai profité pour mettre "RELEASE"
Je fais aussi le tutoriel et j'ai un petit soucis
Là , je ne vois pas pourquoi ça ne vas pas....
caseInSensitiveCompare => caseInsensitiveCompare
Bouh ! :-)
+
Chacha
et
bon, je sens que je vais devoir changer de lunette ou mettre la taille de police dans xcode à 24
Je me sens honteux là .....
Je commence tout juste à développer des applis pour Mac, et je me suis mise à ce petit tuto, et biensur j'ai un petit problème ^^ .
J'ai fini la phase "Interface" et je ne récupère pas les données précédemment entrées en rouvrant l'application.
Allez, je suis sûre que c'est un problème facile pour qui s'y connaà®t mieux que moi, une idée ??
(ça peut venir d'autre part).
Et si, la case est bien cochée. Une autre suggestion ?
Quand à ce que dit Céroce sur le fait que commencer Cocoa par CoreData est une approche très réductrice, je confirme entièrement, bien que ce dernier soit une très belle technologie par ailleurs (Coredata pas Céroce).
Tu ne serais pas ...
du Nooooord?
:brule:
• Bindings bien cochés dans IB
• Connections entre les +/- et le NSArrayController correctement réalisées (faire un clic droit sur le NSArrayController et les Received Actions add et remove doivent être opérationnels)
Après, il suffit de taper sur +, cliquer sur la table view , et saisir le nom du sujet
4 vérifications qui peuvent aider à diagnostiquer :
1- y a-t-il des données de stockées? : ouvrir dans TextEdit le fichier moi/Bibliothèque/Application Support/MaBase/MaBase.xml (document xml contenant la database et les database infos)
2- y a-t-il une alerte au démarrage de l'appli. du genre "les données ne correspondent pas au datamodel"? (si oui, il faut bazarder le fichier cité ci-dessus et rentrer de nouvelles données avec le nouveau datamodel, celui contenant les modifications de structure faites depuis la première entrée de données, ce qui créera un nouveau fichier de données)
3- dans la fenêtre Debugger Console y a-t-il une ou des alertes (dont le texte orienterait sur l'anomalie qui bloque l'affichage des données, qui est le plus souvent une erreur d'orthographe ou de casse sur une Entity, un Attribut ou une Relationship, le texte montrant le plus souvent la mauvaise orthographe en disant que ce n'est pas key value coding compliant)?
4- dans l'interface, les colonnes de la table où doivent s'afficher les données, sont-elles bien bindées sur les NSTableColumn et non pas sur : NSScrollView ou NSTableView ou NSTextFieldCell et vers le bon NSArrayController pour le Bind To (attention : quand on copie un élément ou qu'on le duplique, tous les bindings et toutes les connections sont supprimées dans la copie, heureusement d'ailleurs). Le NSArrayController est-il bien Bind To le "MaBase_AppDelegate" pour un Model Key Path : ManagedObjectContext
Bonne chance avec ça déjà , à suivre...
- je pense avoir respecté les minuscules/majuscules,
- les bindings sont cochés,
- les connections entre le NSArrayController et les boutons sont faites.
1/ il n'y a pas de données enregistrées dans la base
2/ pas d'alerte au démarrage de l'appli
3/ Debugger Console vide
4/ bind sur NSTableColumn vers le bon NSArrayController qui bind to le bon AppDelegate avec comme Model Key Path ManagedObjectContext.
Qui me dit ce que j'ai loupé ? ^^
Poste donc ton code qu'on regarde directement (Options supplémentaires, supprime le dossier Build pour alléger et compresse)
[move] <span style="color:purple">[size=18pt]L'interface elle marche parfaitement ![/size] [/move]<br />
Il faut taper sur + pour ajouter des données, et ce que tu tapes s'enregistre automatiquement dans la bibliohèque <ton nom de sesion>/Bibliotheque/Application Support/Films
Je fais bien ce que tu me dis, j'appuie sur +, je tape "toto', ENTER, je ferme, je rouvre : rien.
Essaie celui-ci
Essaie ton exécutable compilé en Anjou.
Comment as-tu fait pour compiler en Anjou ? Et c'est quoi Anjou ? ^^
Dans ton projet, essaie de supprimer le fichier
Films/build/Debug/Films