BUG NSArray NSDico
Va savoir pourquoi !?
L'application bug...
L'application quitte inopinément et le log n'indique rien de spécial (à part le plantage)
L'application bug...
NSDictionary *otherDictionary;<br /> /*juste ici<br /> otherDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:[loginField stringValue], [passField stringValue]] forKeys:[NSArray arrayWithObjects:@"Login", @"Mot de passe"]];<br />*/<br />
L'application quitte inopinément et le log n'indique rien de spécial (à part le plantage)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
JETTEZ MOI DES TOMATES
à chaque fois je l'oublie ! je le sais mais ce pu*tain de nil m'*mmer*e
Ca sert à quoi ce nil, au fait ? ???
C'est comme une chaine de type "char" en C.
Tu peux "t'amuser" à créer un tableau de 3 items, l'afficher, placer un nil à l'item du milieu puis le réafficher, le dernier item sera toujours ok mais seulement le premier s'affichera.
Insérer nil dans un NSArray ?
Comment fais tu ça ?
Les NSArray et autres collection d'obj-c n'acceptent que des objet.
Tu veux dire un NSNull object ?
Bref il est vrai qu'insérer nil (le vrai pas NSNull) dans un tableau existant n'est pas chose très claire).
Le tout était de bien piger que dans
NSArray *a=[NSArray arrayWithObjects:@a,nil,@c,nil];
NSLog(@%@",a);
Seul a s'affichait, je voulais exprimer ça :-\\
Je voudrais écrire sur un fichier plist qui se trouve sur mon serveur
Ok pas de plantage mais un problème -> Y'a rien de changé sur le fichier !
et juste avant d'afficher mon panneau d'alerte, le log affiche :
Les listes d'arguments variables (comme par exemple, la liste des objets dans arrayWithObjects, ou plus simplement la liste dans NSLog ou printf) est une fonctionnalité du langage C reprise dans Objective-C.
Pour faire simple, cette liste d'arguments est mise en mémoire puis l'appel à la fonction utilisant ces arguments est réalisé. Mais cette fonction ne connait que l'emplacement (en mémoire) de cette liste, mais pas le nombre d'éléments qu'elle contient.
Aussi, pour déterminer le nombre d'éléments qu'elle contient, plusieurs astuces sont utilisés :
- passage explicite du nombre d'argument (exemple : Mafonction(3, arg1, arg2, arg3); ici, le premier argument 3 donne le nombre d'arguments qui suivent).
- passage implicite du nombre d'argument (exemple : NSLog(@%i %f %c, arg1, arg2, arg3); ici, c'est le nombre de symbole % dans la chaine qui donne le nombre d'arguments).
- insertion d'un marqueur de fin de liste : généralement, ce marqueur est représenté par une valeur impossible à rencontrer dans les arguments. C'est le cas notamment pour les NSArray, ou nil est impossible à insérer dans un tableau. Donc la méthode arrayWithObjects va lire la liste d'argument jusqu'à rencontré nil.
A noter que l'absence du nil provoque un plantage, car arrayWithInit va lire la liste d'argument au delà de sa taille, d'où récupération de valeurs indéterminés.
Dans ton exemple, le premier nil arrête la lecture de la liste d'arguments, donc seul l'objet NSString @a a été mis dans le NSArray.
.