Problème d'ajout d'objets dans un tableau
Ma
Membre
Bonjour à tous,
je tiens en premier lieu à préciser que je suis un ultime débutant en objective-C et que je développe par pur intérêt de la chose. Donc voici mon problème: j'ai créé un projet cocoa d'une application de document. Grosso modo, j'ai ecrit 3 classes:
controller
objetMini
objetMaxi
le but était que lorsque je clique sur un bouton, une série d'objets basés sur objetMini se créent et s'ajoutent au tableau généré par objetMaxi. Je me suis donc fait un ibaction dans controller qui ressemble a ceci
objetMaxi *tableau = [[objetMaxi alloc] init];
int i;
for(i=0;i<=5;i++){
objetMini *nouvelObjet = [[objetMini alloc] alloc];
[nouvelObjet methodeQuelconque:i];
}
[tableau methodeDajout:nouvelObjet];
----
ici methodeDajout est simplement:
-(void)methodeDAjout:(NSObject *)objet{
[variableDinstance addObject:object];
}
----
le truc c'est que si je fais un NSLog du tableau à un index précis (peut importe l'index) j'obtiens null dans la console. Si je change tableau par un NSMutableArray local à ma classe, ça fonctionne. J'ai essayé plusiuers chose et vraiment je bloque.
Ma
je tiens en premier lieu à préciser que je suis un ultime débutant en objective-C et que je développe par pur intérêt de la chose. Donc voici mon problème: j'ai créé un projet cocoa d'une application de document. Grosso modo, j'ai ecrit 3 classes:
controller
objetMini
objetMaxi
le but était que lorsque je clique sur un bouton, une série d'objets basés sur objetMini se créent et s'ajoutent au tableau généré par objetMaxi. Je me suis donc fait un ibaction dans controller qui ressemble a ceci
objetMaxi *tableau = [[objetMaxi alloc] init];
int i;
for(i=0;i<=5;i++){
objetMini *nouvelObjet = [[objetMini alloc] alloc];
[nouvelObjet methodeQuelconque:i];
}
[tableau methodeDajout:nouvelObjet];
----
ici methodeDajout est simplement:
-(void)methodeDAjout:(NSObject *)objet{
[variableDinstance addObject:object];
}
----
le truc c'est que si je fais un NSLog du tableau à un index précis (peut importe l'index) j'obtiens null dans la console. Si je change tableau par un NSMutableArray local à ma classe, ça fonctionne. J'ai essayé plusiuers chose et vraiment je bloque.
Ma
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
j'ai pas très bien compris ce que devait faire ton code exactement, mais j'ai remarqué quelques erreurs:
premièrement pour instancier ton objetMini tu lui envoi deux fois alloc, il faut faire plutôt:
ensuite en dehors de ta boucle for tu fais appel à ton objet "nouvelObjet" dont la portée est à l'intérieur de cette boucle for puisque il est créé dedans.
Tout d'abord, je suis désolé pour les diverses erreurs qui ont pu se glisser dans le message que j'ai écris. En fait, je l'ai écris sur mon iPhone dans l'autobus, alors ma capacité de visualisation du tout était quelque peu diminuée. Je crois qu'il serait préférable de vous envoyer le code complet... Il s'agit en fait de la version la plus diminuée que je pouvais faire pour montrer mon problème:
objetMaster.h
#import <Cocoa/Cocoa.h>
@interface objetMaster : NSObject {
NSMutableArray*tableau;
}
-(void)ajoutTableau:(NSObject*)objet;
-(NSMutableArray*)tableau;
@end
objetMaster.m
#import "objetMaster.h"
@implementation objetMaster
-(void)ajoutTableau:(NSObject*)objet{
[tableau addObject:objet];
}
-(NSMutableArray *)tableau{
return tableau;
}
@end
objetMini.h
#import <Cocoa/Cocoa.h>
@interface objetMini : NSObject {
NSString*champsDeTexte;
}
-(void)importerChampsDeTexte:(NSString*)champs;
-(NSString*)champsDeTexte;
@end
objetMini.m
#import "objetMini.h"
@implementation objetMini
-(void)importerChampsDeTexte:(NSString*)champs{
champsDeTexte = champs;
}
-(NSString*)champsDeTexte{
return champsDeTexte;
}
@end
controller.h
#import <Cocoa/Cocoa.h>
@interface controller : NSObject {
}
-(IBAction)fonction:(id)sender;
-(void)creerTableau;
@end
controller.m
#import "controller.h"
#import "objetMini.h"
#import "objetMaster.h"
@implementation controller
-(IBAction)fonction:(id)sender{
[self creerTableau];
}
-(void)creerTableau{
objetMaster *tableau = [[objetMaster alloc]init];
NSMutableArray *tableauLocal = [[NSMutableArray alloc] init];
int i;
for(i=0;i<=29;i++){
NSString *Nouvelle = @Test;
objetMini *objet = [[objetMini alloc]init];
[objet importerChampsDeTexte:Nouvelle];
[tableau ajoutTableau:objet];
[tableauLocal addObject:objet];
}
NSLog(@%@",[[tableau tableau] objectAtIndex:0]);
NSLog(@%@",[tableauLocal objectAtIndex:0]);
}
@end
Et voici le résultat que j'obtiens sur la console:
[Session started at 2009-11-20 10:38:58 -0500.]
GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 01:19:56 UTC 2009)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".
tty /dev/ttys001
Loading program into debugger...
Program loaded.
run
[Switching to process 9377]
Running...
2009-11-20 10:39:00.908 Untitled[9377:a0f] (null)
2009-11-20 10:39:00.910 Untitled[9377:a0f] <objetMini: 0x10012ccf0>
On peut voir que le l'objet à l'indice 0 pour le tableau de la classe objetMaster est (null) alors qu'il existe un objetMini pour le tableauLocal... Et c'est précisément ici que ça coince pour moi... Je ne vois pas pourquoi...
Au fait, merci pour ces réponses rapides, c'est vraiment bien de voir l'entraide sur les forums même pour des sujets moins stimulants
Ma
NSLog(@%@",[tableau tableau]);
ça donne quoi ?
Moi, je sais
Problème de mémoire dans objetMini.m
Ma