Que signifie (NSString **) ?

plumber

Membre confirmé
15 Janvier 2003
473
0
Je vois que tu t'en sors tout seul pratiquement tu as trouvé les réponses de ta premiere question puisque tu bosses avec les dico

mymethod [arg mydico]

mais bon un objective-c converted ca fait du bien
 

bluheim

Membre confirmé
29 Octobre 2003
354
16
Oui, en effet, je progress lentement mais sûrement...


Tiens, puisque je t'ai sous la main, j'ai une question pour toi, à propos des pointeur de pointeur.

J'ai une méthode de ce style :

- (int)faitUnTrucAvecUnTableau:(NSMutableArray **)tableau;

Je voudrais donc que ma méthode accepte un tableau en paramètre et soit en mesure de renvoyer ce tableau mis à jour, plus un entier. Est-ce la bonne syntaxe ?


Deuxième question : ma méthode fonctionne, elle met bien à jour le tableau. Mais comment puis-je faire pour qu'il soit possible d'appeler la méthode en ne se souciant pas du tableau - en clair, la lancer comme suit : [objectMachin faitUnTrucAvecUnTableau:nil]

Je sais que c'est possible puisque une bonne partie des méthodes la classe NSFormatter sont en mesure d'accepter des paramètres à nil (cf. méthode scanString:intoString:).

Mais je ne sais pas du tout comment déterminer dans ma méthode si mon tableau est à nil. Dés que je tente de l'accéder, d'une manière ou d'une autre, le programme se plante sur un SIGBUS.



Autrement dit, pour simplifier l'énoncé : comment donc fonctionne la méthode scanString:intoString de NSFormatter ???
 

Eddy58

Membre confirmé
27 Décembre 2002
134
0
Visiter le site
Première question : Ca m'a l'air tout à fait correct.
Seconde question : Bonne question mais là je peux pas te dire... Le truc doit est être simple à mon avis, mais faut l'avoir connu et expérimenté. Quelqu'un dans la salle peut répondre à Blueheim ?
 

molgow

Vétéran
Club MacG
4 Janvier 2002
5 493
612
37
Suisse
www.monts-chevreuils.ch
Je suis pas sûr d'avoir bien compris (j'ai lu en vitesse).. mais si tu essaies d'invoquer une méthode sur un objet qui vaut nil, alors tu auras très probablement un plantage de ton appli (signal SIGBUS = erreur d'adressage de la mémoire).

Et pour tester si ton objet pointe sur nil, il suffit juste de tester... si ton objet pointe sur nil

if (!(myObjet == nil)) { ... }
 

molgow

Vétéran
Club MacG
4 Janvier 2002
5 493
612
37
Suisse
www.monts-chevreuils.ch
A part ça, je ne suis pas sûr que ce soit une très bonne idée de vérifier que l'objet n'est pas à nil pour faire des opérations dessus. Dans le sens, où selon moi, c'est plutôt de la responsabilité de celui qui appèle cette méthode de ne pas envoyer un objet pointant sur nil !

Car en capturant ce problème de pointeur nil, que se passe-t-il ensuite ? ton programme lève une exception ou est-ce qu'il fait simplement rien du tout ? car s'il ne fait rien, c'est pas bon du tout. Le programmeur qui appelle ta méthode en lui passant un pointeur nil, il va croire que la méthode a bien passé et le programme continuera son cours comme si de rien n'était.
 

bluheim

Membre confirmé
29 Octobre 2003
354
16
En fait, l'idée est la suivante : si l'objet qui appelle la méthode est interressé aussi bien par l'entier renvoyé par la méthode que par le tableau contenant les résultats, il lui suffit d'envoyer une instance de tableau valide à la méthode - qui renseignera le tableau en conséquence.

Si au contraire il n'est interressé que par l'entier retourné, il envoie nil à la méthode et basta.


C'est déjà le fonctionnement d'un certain nombre de méthodes standards (cf. NSFormatter à ce sujet)...




Concrétement, ce que fait ma méthode est d'aller rechercher dans une base de données les enregistrements ayant une valeur donnée. Elle renvoie le nombre d'enregistrements trouvés et éventuellement remplit le tableau envoyé en paramètres avec les enregistrement trouvés.

Le programmeur peur très bien ne vouloir savoir que le nombre d'enregistrements renvoyés. Auquel cas, il envoie nil en tant que paramètre du tableau et ne s'encombre pas avec une variable dont il n'a pas l'utilité...