Comment créer des variable à indentation
plusdego
Membre
Bonjour à tous,
je suis débutant et j'ai besoin d'un coup de pouce. Je cherche à créer un ensemble de variables du type :
NSArray $var1 = [NSArray ...
NSArray $var2= [NSArray ...
NSArray $var3= [NSArray ...
...
NSArray $varn= [NSArray ...
Est-ce possible de le faire à partir d'une boucle de i=1 à i=n ?
Merci d'avance,
Julien
je suis débutant et j'ai besoin d'un coup de pouce. Je cherche à créer un ensemble de variables du type :
NSArray $var1 = [NSArray ...
NSArray $var2= [NSArray ...
NSArray $var3= [NSArray ...
...
NSArray $varn= [NSArray ...
Est-ce possible de le faire à partir d'une boucle de i=1 à i=n ?
Merci d'avance,
Julien
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
On ne peut pas faire de l'indirection sur les variables... Ce n'est pas du Basic
Aie aie... le problème c'est que mes NSArray contiennent beaucoup de données. Quand tu dis faire un tableau, c'est bien faire un NSArray remplit de Nsarray(s) ?
amicalement,
Julien
De plus si ce sont des données statiques (genre un tableau que tu initialises toujours aux mêmes valeurs et qui ne dépendent pas d'autres choses comme des réglages utilisateurs ou quoi, bref c'est toujours le même tableau que tu crées), tu peux peut-être plutôt écrire ton "tableau de tableau" dans un fichier au format plist, comme ça tu peux ensuite le charger en une seule ligne grâce à la méthode [tt]initWithContentsOfFile:[/tt] qui va directement créer ton NSArray de NSArrays à partir du contenu du plist !
dans ton code, tu met [[NSArray alloc] init...].
Jusqu'à maintenant, pour initialiser un NSArray, j'utilise:
NSArray *text = [NSArray array]...
A quoi sert le alloc ?
Amicalement,
Julien
Comme tous les constructeurs de commodité qui sont basés sur le même principe, comme par exemple le constructeur de commodité "string" de NSString, qui est exactement équivalent à alloc+init+autorelease, ou stringWithFormat: qui est le constructeur de commodité équivalent à alloc+initWithFormat+autorelease.
Par contre donc si tu utilises la méthode array, ça va donc te créer un objet autoreleasé, donc dans ce cas il ne faut plus faire le "release" que j'ai mis à la fin de la boucle "for" bien sûr. Faut rester cohérent.
- Est-il possible de remplacer une chaine de caractère dans tous un NSarray d'un coup ou faut-il le faire en extrayant chacune des lignes du NSArray ?
- Disons que j'ai un NSArray composé de 2 NSArray. Quel code utiliser pour sortir la valeur situé à l'index 10 de l'array inclut à l'index 2 de l'array principal (Expérons que cela soit compréhensible comme question...).
Un grand merci à vous tous !!
Julien
Pour la 2eme : [[monTableauPrincipal objectAtIndex:2] objectAtIndex:10];
A+
Merci beaucoup pour ces infos.
Nouvelle question concernant le debug d'un programme via les messages de la Console.
J'ai un message du type :
"2008-10-11 13:01:42.347 PROGTEST[622:20b] *** Terminating app due to uncaught exception 'NSRangeException'..."
Comment puis-je savoir où le problème se situe dans mon code ? Est-ce que je suis obligé de faire du pas à pas jusqu'à l'erreur ?
Amicalement,
Julien
Donc essaye de voir où ton algo peut pêcher (regarde les bornes de tes boucles) et si tu trouves pas, effectivement, pas à pas...
Il n'y a pas de moyen de savoir quel ligne du programme renvoie l'erreur à partir de la console ?????
Utilises le débogueur.
• Tu mets un breakpoint sur la méthode suspecte (clic dans la goutière)
• Tu ouvres la fenêtre Debuggerr (menu Run > Debugger)
• Tu lances en mode Debug ( Run > Debug)
• Tu peux observer pas à pas l'exécution de ton code
Ou alors autre possibilité pour déboguer, tu mets des messages un peu partout dans ton code (autour du code suspect) avec des NSLog. Ca revient un peu au même que d'avancer pas à pas mais ça t'évite d'appuyer sur une touche à chaque fois pour avancer d'une instruction... et tu verras bien quand ton appli plantera quels messages/NSLogs tu as eu le temps d'avoir et ceux que tu n'as pas eus. Ca te permettra de resserrer le problème.
Maintenant le mieux c'est une combinaison un peu des deux peut-être : mettre des NSLogs (soit t'affichant un texte basique te permettant de repérer où il est dans le code au moment de l'exécution, mais tant qu'à faire en profiter pour afficher quelques informations comme le nombre d'éléments du tableau que tu es en train de parcourir et l'index auquel tu veux accéder, etc) dans un premier temps pour voir à peu près à quel endroit est le problème, et ensuite s'ils ne t'ont pas suffi à comprendre ton erreur, faire du pas à pas autour de cette zone où ça crash pour en profiter pour "inspecter" les éléments dans le débogueur.
Pour cela, il suffit d'afficher la fenêtre des breakpoints puis de rajouter [NSException raise] comme breakpoint (en entrant le texte a la place de "Double-click for symbol").
Oui, ça c'est la meilleure solution...
J'ai besoin de faire passer une valeur d'une classe à une autre et je ne sais pas comment faire... Quand je déclare un NSString dans une classe, je le perd dans la deuxième classe... Pouvez-vous m'aiguiller ??
Amicalement,
Julien
• La NSString correspond-elle à une variable d'instance de l'une ou/et de l'autre des classes ?
• La NSString sert-elle pour exécuter une méthode de l'une des classes ?
• La NSString est-elle une constante dans ton programme
...
En gros, j'ai une classe qui affecte une valeur à une variable. Je souhaiterais récupérer cette valeur dans une autre classe (ou plusieurs).
Amicalement,
Julien
Il suffit que l'instance de la classe A qui veut connaà®tre la valeur de la NSString dans l'instance de la classe B ait une variable qui pointe sur cette B-instance
@class Class B;
@interface ClassA : .. {
ClassB * objetB;
}
..
@end
========================================
@interface ClassB : .. {
NSString * string;
}
@end
========================================
@implementation ClassA
{
....
NSString * stringInB=[objetB valueForKey:@string];
....
}
@end
Naturellement, il faut que objetB soit quelque part initialisée en pointant sur l'instance de la classe B en question.