Bonnes je ne sais pas, mais j'ai des raisons, enfin surtout une : plusieurs éléments ayant plusieurs propriétés.
J'ai donc pensé xml pour sa hierarchisation.
Les fichiers plists sont également hiérarchisés (voir ce post récent), et l'accès en lecture-écriture simplifiée (méthodes ad-hoc de NSArray, NSDictionary, NSString, ..). A toi de voir tes besoins ...
dans 1237923843:
Your application is generally responsible for adding and removing these files. However, iTunes removes these files during a full restore of the device so you should be able to recreate them as needed. In iPhone OS 2.2 and later, the contents of this directory are not backed up by iTunes.
Si je traduis bien, cela veut dire que ce n'est pas conservé lors d'une copie de sauvegarde ?
Pour vous tenir un peu au courant de l'avancement.
Alors l'interface est presque terminée. Encore une page à faire. Et vérifier que le clavier marche bien.
Je n'ai pas encore décidé ni quel type de fichier utiliser pour stocker les données, ni à quel endroit.
Ensuite, il va falloir que j'apprenne à lire ce fichier.
A en traiter uniquement la partie que je veux. Par exemple, en admettant la structure suivante : - jour 1 - personne 1 -lieu 1 - personne 2 -lieu 2 - jour 2 - personne 2 -lieu 1
Il faudra que j'affiche uniquement les personnes pour le jour 1.
A écrire de nouvelles parties, et à modifier celles existantes.
En gros, y'a du taf.
Et je vais avoir souvent besoin de vous. :why?:
Juste en passant, quelqu'un sait comment afficher l'icon choisit dans le info.plist dans une UIImageView ? J'arrive a récupérer le nom, mais comment le passer à l'image ?
Juste en passant, quelqu'un sait comment afficher l'icon choisit dans le info.plist dans une UIImageView ? J'arrive a récupérer le nom, mais comment le passer à l'image ?
Les gars, j'arrive vraiment pas à me décider pour le stockage des données.
Ni sur le type de fichier, ni sur l'emplacement.
Il faut un fichier unique, facilement parcourable à la façon des "noe“uds" en XML. Facilement éditable dans un "noe“ud" voulu. Dans lequel je peux ajouter d'autres "noeuds" là où je le souhaite.
Il faut que ce fichier soit sauvegarder pour être utilisé à chaque démarrage de l'appli. En prime le backup par iTunes sera parfait.
Je sais vraiment pas. Le plist me semble très rigide, mais je me trompe peut-être. :why?: :why?:
Le plist est le plus simple, mais sa grosse restriction c'est qu'il ne peux stocker que certain type de données (NSDictionary, NSArray, NSString, NSData, et y'en a p'tet un ou 2 autres dont je me rappelle plus mais c'est marqué dans la doc). Cependant tu peux toujours encapsuler tes données dans des représentations de ces classes, mais c'est sûr que c'est pas toujours le plus simple.
Sinon il y a la solution de l'archivage. Je suis en train justement personnellement de relire la doc Apple là dessus car j'en ai aussi besoin pour mon projet, donc je me raffraichis la mémoire aussi
La plist, c'est pas les types de données qui me gènent (il me faut uniquement des NSString), mais plutôt la flexibilité en cours d'utilisation. Je vais approfondir la doc, mais j'ai l'impression que plist contient un certain nombre de clé, et que ce nombre ne peut pas être modifié durant l'exécution. Modifier un élément, j'ai bien vu que c'est possible, mais en ajouter .........
Les contacts dans l'iPhone, ils sont stockés de quelle manière ?
Bien sûr que si c'est possible pour ça dans le plist. Le plist typiquement comme je le dis plus haut stocke des collections comme les NSArrays ou NSDictionary, contenant des NSData ou des NSString. Ce n'est qu'une sérialisation de ces collections.
Donc à tout moment tu peux prendre un NSArray (mutable ou non) ou un NSDictionary (mutable ou non) ou même un NSDictionary contenant des NSDictionrary de NSArray de NSString ou ce genre de structure, et le sérialiser dans un plist, puis le relire plus tard.
1) Lire un NSDictionary d'un plist 2) Demander la version mutable du NSDictionary récupéré (mutableCopy) 3) Modifier son NS(Mutable)Dictionary à volonté 4) Réécrire le NSDictionary dans le plist
Après lecture des différentes doc, je me rend compte que en effet, ls plist ne sont que de simples fichiers xml avec des mots clés particuliers. Et plus facile à parcourir du fait de ces mots clés. C'est parfait. Merci.
Le plist n'est pas forcément du XML. Ca fait partie d'un des format possible de sérialisation, mais ce n'est pas le seul, il existe des plist au format binaire aussi (et même au format texte ascii). Mais un plist n'est pas fait pour être lu en tant que fichier XML de toute façon, mais simplement par les classes qui le sérialisent et désérialisent.
Exemple :
NSDictionary* dict = ... // un dico, potentiellement complexe, genre dictionnaire de tableaux de dictionnaires de chaà®nes<br />NSString* path = ...// un chemin d'accès vers un fichier où sérialiser le dico dans un plist<br />[dict writeToFile: path atomically:NO]; // hop, crée un plist représentant ton dico<br />...<br />NSDictionary* dict2 = [NSDictionary dictionaryWithContentsOfFile:path]; // hop, relis le dicto sérialisé depuis le plist et recrée le dico correspondant.
En mettant un breakpoint après la dernière ligne, je vois que le tableau contient 2 keys, mais seule la première possède une valeur (heureusement correcte).
Voici le plist :
Root Dictionnary -Element Dictionnary - Lieu String - Date Date -Element2 Dictionnary - Lieu String - Date Date
Avec le code précédent, le tableau ne content que Lieu en valeur. Il a bien la seconde ligne Date, mais il n'y a pas de valeur.
J'ai commandé le livre Programmation Cocoa sous Mac Os X. Je serais un peu moins sollicitant comme ça. J'espère que j'aurai de quoi renforcer mes faibles bases avec ce livre.
Et peut-être avancer dans mon projet.
Remplir une TableView, Modifier un élément de cette TableView, Ajout, Suppression, et affichage selon un ou plusieurs critères.
Pourquoi ne pas utiliser simplement la méthode dictionaryWithContentsOfFile: qui crée un dictionary à partir d'une plist ? + (id)dictionaryWithContentsOfFile:(NSString *)path
Parameters path A full or relative pathname. The file identified by path must contain a string representation of a property list whose root object is a dictionary. The dictionary must contain only property list objects (instances of NSData, NSDate, NSNumber, NSString, NSArray, or NSDictionary). For more details, see Property List Programming Guide for Cocoa.
Il est donc logique qu'un seul élément apparaisse. Selon ton fichier, tableau=[[NSMutableArray alloc] initWithObjects: [temp objectForKey:@RDV2],[temp objectForKey:@RDV],nil]; devrait être plus efficace.
Maintenant à quoi cela te sert-il d'avoir pour la même collection une version en NSDictionary (temp) et une version en NSArray (tableau). Si c'est uniquement de la version array dont tu as besoin, on peut très bien faire le plist en
Ensuite, à partir de cette liste, je veux l'afficher dans ma tableview.
Mon "tableau", contient bien 2 éléments, mais ensuite, si j'ai bien compris, je dois dire que ce tableau est la source de ma tableview ? C'est ça ? :-\\
Pas exactement. L'un de tes objets, sans doute un UIViewController , voir un UITableViewController implémente les méthodes du data source , et plus tard celles du delegate.
à compléter
<br /><br />#pragma mark -<br />#pragma mark Table view methods<br />- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {<br /> return <#le nombre de sections#>;<br />}<br /><br />// Customize the number of rows in the table view.<br />- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {<br /> return <#le nombre de lignes dans la section#>;<br />}<br /><br />// Customize the appearance of table view cells.<br />- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {<br /> static NSString *CellIdentifier = @"Cell";<br /> <br /> UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];<br /> if (cell == nil) {<br /> cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];<br /> }<br /><br /> cell.text=...;<br /> <br /> return cell;<br /> }<br /> <br /><br />
On relie ensuite l'iBOutlet datasource de la table view au contrôleur dans IB
J'ai souscrits au programme developer lundi soir mais je n'ai reçu aucun mail depuis (ni confirmation de paiement, ...). Je me suis inscrit en utilisant mon identifiant @mac.com qui est associé à une adresse en @free.fr. J'ai vérifié en me connectant à mon compte et en regardant l'adresse email du compte.
Je me demande donc si les emails vont arrivés dans la boite @mac.com ou dans la boite @free.fr. Le problème étant que, je n'ai pas accès à cette boite @mac.com.
En effet, sur le site mac.com, on me dit que mon identifiant et mon mot de passe sont incorrects, alors que je m'en sert pour me connecter sur l'ADC ou sur l'iTunes store.
J'ai fais une demande de modification de mot de passe, que j'ai reçu sur @free.fr, j'ai suivi le lien, redéfini le mot, mais toujours aucun moyen de se connecter au site mac.com.
Bref, la grande question est : vais-je recevoir l'activation sur @free.fr ou sur @mac.com (ce qui serait bien gênant) ?
Ce que je peux te dire, c'est qu'hier les connections avec le Developer Portal et avec iTunesConnect étaient complètement aléatoires : pages de déconnections, serveur ne répondant pas, ... c'est la première fois que je rencontre ce type de problème, car d'habitude la connection est parfaitement fluide.
Sur le site myinfo.apple.com, dans la section email, j'ai bien le mail en @free.fr de renseigné, mais je n'ai absolument rien reçu concernant ma commande.
Ben faut voir le bon côté pour moi (désolé j'me la joue un peu perso), mais ce délai me permet d'affiner mon appli. Je la proposerai à Apple quand elle sera vraiment en excellent état, pour ne pas perdre encore 2 ou 3 semaines pour la mise à jour.
Le service est un peu victime de son succès.
J'ai également commencé à zieuter du côté des taxes US. A ce que j'ai compris, y'a un truc à remplir en mettant des 0 partout ?
Pour cela, tu trouveras peut-être ton bonheur dans ce post où pas mal de questions ont été posées concernant le remplissage desdits formulaires, je crois...
D'ailleurs on va p'tet le "punaiser" en haut du forum pour qu'il soit toujours accessible, ce post ? ou mieux si qqun avait le courage de faire un résumé de ce qu'il faut mettre dans chaque champ pour remplir ces formulaires US quand on veut en tant que développeur français publier une appli sur l'AppStore français ? Et on le mettrait en article ?
Pour cela, tu trouveras peut-être ton bonheur dans ce post où pas mal de questions ont été posées concernant le remplissage desdits formulaires, je crois...
D'ailleurs on va p'tet le "punaiser" en haut du forum pour qu'il soit toujours accessible, ce post ? ou mieux si qqun avait le courage de faire un résumé de ce qu'il faut mettre dans chaque champ pour remplir ces formulaires US quand on veut en tant que développeur français publier une appli sur l'AppStore français ? Et on le mettrait en article ?
Très bonne idée... donc si quelqu'un l'a déjà fait et s'en souvient ou bien a une copie...
Réponses
Les fichiers plists sont également hiérarchisés (voir ce post récent), et l'accès en lecture-écriture simplifiée (méthodes ad-hoc de NSArray, NSDictionary, NSString, ..). A toi de voir tes besoins ...
Si je traduis bien, cela veut dire que ce n'est pas conservé lors d'une copie de sauvegarde ?
En effet, ce répertoire n'est pas sauvegradé en cas de restauration. Donc, faut aller voir ailleurs. :-\\
Pour vous tenir un peu au courant de l'avancement.
Alors l'interface est presque terminée. Encore une page à faire. Et vérifier que le clavier marche bien.
Je n'ai pas encore décidé ni quel type de fichier utiliser pour stocker les données, ni à quel endroit.
Ensuite, il va falloir que j'apprenne à lire ce fichier.
A en traiter uniquement la partie que je veux.
Par exemple, en admettant la structure suivante :
- jour 1
- personne 1
-lieu 1
- personne 2
-lieu 2
- jour 2
- personne 2
-lieu 1
Il faudra que j'affiche uniquement les personnes pour le jour 1.
A écrire de nouvelles parties, et à modifier celles existantes.
En gros, y'a du taf.
Et je vais avoir souvent besoin de vous. :why?:
Juste en passant, quelqu'un sait comment afficher l'icon choisit dans le info.plist dans une UIImageView ?
J'arrive a récupérer le nom, mais comment le passer à l'image ?
UIImage * iconImage=[UIImage imageNamed:iconName];
[myImageView setImage: iconImage]; // ou myImageView.image:iconImage
Mon code final :
Les gars, j'arrive vraiment pas à me décider pour le stockage des données.
Ni sur le type de fichier, ni sur l'emplacement.
Il faut un fichier unique, facilement parcourable à la façon des "noe“uds" en XML.
Facilement éditable dans un "noe“ud" voulu.
Dans lequel je peux ajouter d'autres "noeuds" là où je le souhaite.
Il faut que ce fichier soit sauvegarder pour être utilisé à chaque démarrage de l'appli.
En prime le backup par iTunes sera parfait.
Je sais vraiment pas. Le plist me semble très rigide, mais je me trompe peut-être. :why?: :why?:
Cependant tu peux toujours encapsuler tes données dans des représentations de ces classes, mais c'est sûr que c'est pas toujours le plus simple.
Sinon il y a la solution de l'archivage. Je suis en train justement personnellement de relire la doc Apple là dessus car j'en ai aussi besoin pour mon projet, donc je me raffraichis la mémoire aussi
http://developer.apple.com/documentation/Cocoa/Conceptual/Archiving/Archiving.html
Je vais approfondir la doc, mais j'ai l'impression que plist contient un certain nombre de clé, et que ce nombre ne peut pas être modifié durant l'exécution. Modifier un élément, j'ai bien vu que c'est possible, mais en ajouter .........
Les contacts dans l'iPhone, ils sont stockés de quelle manière ?
Le plist typiquement comme je le dis plus haut stocke des collections comme les NSArrays ou NSDictionary, contenant des NSData ou des NSString. Ce n'est qu'une sérialisation de ces collections.
Donc à tout moment tu peux prendre un NSArray (mutable ou non) ou un NSDictionary (mutable ou non) ou même un NSDictionary contenant des NSDictionrary de NSArray de NSString ou ce genre de structure, et le sérialiser dans un plist, puis le relire plus tard.
1) Lire un NSDictionary d'un plist
2) Demander la version mutable du NSDictionary récupéré (mutableCopy)
3) Modifier son NS(Mutable)Dictionary à volonté
4) Réécrire le NSDictionary dans le plist
Et plus facile à parcourir du fait de ces mots clés.
C'est parfait.
Merci.
Mais un plist n'est pas fait pour être lu en tant que fichier XML de toute façon, mais simplement par les classes qui le sérialisent et désérialisent.
Exemple :
On est plutôt bien dans ce nouveau forum, c'est confortable et y'a un joli menu.
De mon côté, ben, ça rame, sévère.
Pour apprendre, je me suis dit que j'allais essayé d'afficher un élément de la plist dans un label. Comme ceci :
En mettant un breakpoint après la dernière ligne, je vois que le tableau contient 2 keys, mais seule la première possède une valeur (heureusement correcte).
Voici le plist :
Root Dictionnary
-Element Dictionnary
- Lieu String
- Date Date
-Element2 Dictionnary
- Lieu String
- Date Date
Avec le code précédent, le tableau ne content que Lieu en valeur. Il a bien la seconde ligne Date, mais il n'y a pas de valeur.
Comment ça se fait ?
J'ai commandé le livre Programmation Cocoa sous Mac Os X. Je serais un peu moins sollicitant comme ça.
J'espère que j'aurai de quoi renforcer mes faibles bases avec ce livre.
Et peut-être avancer dans mon projet.
Remplir une TableView, Modifier un élément de cette TableView, Ajout, Suppression, et affichage selon un ou plusieurs critères.
Avec ça, mon appli sera finie.
"Comment ça je vais en baver ?"
C'est un très bon livre ...
Bonne lecture
Coucou à tous.
Comment allez-vous depuis le temps ?
J'ai bien avancé dans la lecture de Programmation Cocoa édition 3. Très très bon bouquin. Très didactique, progressif, excellent.
Je reviens donc sur l'iPhone pour continuer l'appli de mon ami.
C'est un afficheur de Rendez-vous dans une Table View.
Les informations proviennent d'une plist. Voici un exemple :
Et pour remplir la vue, je remplit d'abord une NSMutableArray de cette façon :
Mais j'ai bien l'impression que ça ne marche pas.
En débugage je n'obtiens que l'info "Adieu", mais "tableau" contient pourtant 3 éléments (les 2 autres sont vide).
Comme dirait leeloo dans le 5eme élément : Pliiiiiiiiiiiise, Help !
Pourquoi ne pas utiliser simplement la méthode dictionaryWithContentsOfFile: qui crée un dictionary à partir d'une plist ?
+ (id)dictionaryWithContentsOfFile:(NSString *)path
Parameters
path
A full or relative pathname. The file identified by path must contain a string representation of a property list whose root object is a dictionary. The dictionary must contain only property list objects (instances of NSData, NSDate, NSNumber, NSString, NSArray, or NSDictionary). For more details, see Property List Programming Guide for Cocoa.
2) Fonctionnement des NSDictionary
Dans tableau = NSMutableArray alloc] initWithArray: [NSMutableArray arrayWithArray:[temp objectForKey:@"RDV"]; , [temp objectForKey:@RDV] correspond à l'unique élément du dictionnaire temp correspondant à la clé RDV soit
<key>RDV</key>
<dict>
<key>New item</key>
<date>2009-03-27T19:57:34Z</date>
<key>New item - 2</key>
<integer>1</integer>
<key>New item - 3</key>
<string>Adieu</string>
</dict>
Il est donc logique qu'un seul élément apparaisse. Selon ton fichier,
tableau=[[NSMutableArray alloc] initWithObjects: [temp objectForKey:@RDV2],[temp objectForKey:@RDV],nil]; devrait être plus efficace.
Maintenant à quoi cela te sert-il d'avoir pour la même collection une version en NSDictionary (temp) et une version en NSArray (tableau).
Si c'est uniquement de la version array dont tu as besoin, on peut très bien faire le plist en
et utiliser la méthode initWithContentsOfFile de NSArray
J'ai modifié ma plist de cette façon :
Ensuite, à partir de cette liste, je veux l'afficher dans ma tableview.
Mon "tableau", contient bien 2 éléments, mais ensuite, si j'ai bien compris, je dois dire que ce tableau est la source de ma tableview ? C'est ça ? :-\\
à compléter
On relie ensuite l'iBOutlet datasource de la table view au contrôleur dans IB
Alors voilà , petite question rapide :
J'ai souscrits au programme developer lundi soir mais je n'ai reçu aucun mail depuis (ni confirmation de paiement, ...). Je me suis inscrit en utilisant mon identifiant @mac.com qui est associé à une adresse en @free.fr. J'ai vérifié en me connectant à mon compte et en regardant l'adresse email du compte.
Je me demande donc si les emails vont arrivés dans la boite @mac.com ou dans la boite @free.fr. Le problème étant que, je n'ai pas accès à cette boite @mac.com.
En effet, sur le site mac.com, on me dit que mon identifiant et mon mot de passe sont incorrects, alors que je m'en sert pour me connecter sur l'ADC ou sur l'iTunes store.
J'ai fais une demande de modification de mot de passe, que j'ai reçu sur @free.fr, j'ai suivi le lien, redéfini le mot, mais toujours aucun moyen de se connecter au site mac.com.
Bref, la grande question est : vais-je recevoir l'activation sur @free.fr ou sur @mac.com (ce qui serait bien gênant) ?
Merci.
et je commence vraiment à trouver le temps long...
comment fais-tu pour le voir ce statut ?
Sur le site myinfo.apple.com, dans la section email, j'ai bien le mail en @free.fr de renseigné, mais je n'ai absolument rien reçu concernant ma commande.
J'ai regardé un peu partout, à chaque référence à un email, c'est bien @free.fr qui est noté.
Donc, en gros, si j'ai encore rien reçu, c'est normal, c'est qu'il y a beaucoup de demande. Et logiquement, tout devrait arrivé sur cet email là ?
J'ai une mise à jour qui est "in review" depuis bientôt 2 semaines.
Alors que la suivante est presque prête.
Eric
Le service est un peu victime de son succès.
J'ai également commencé à zieuter du côté des taxes US. A ce que j'ai compris, y'a un truc à remplir en mettant des 0 partout ?
D'ailleurs on va p'tet le "punaiser" en haut du forum pour qu'il soit toujours accessible, ce post ? ou mieux si qqun avait le courage de faire un résumé de ce qu'il faut mettre dans chaque champ pour remplir ces formulaires US quand on veut en tant que développeur français publier une appli sur l'AppStore français ? Et on le mettrait en article ?
Très bonne idée... donc si quelqu'un l'a déjà fait et s'en souvient ou bien a une copie...