XMLParser
Badz
Membre
[font=arial,helvetica,sans-serif]Bonjour à tous,[/font]
[font=arial,helvetica,sans-serif]Je fais une petite application qui permet de sélectionner des formations.[/font]
[font=arial,helvetica,sans-serif]J'explique : Première page, afficher des domaines (administration, bureautique, informatique, ...), seconde page afficher les lieux de formations, 3ème page afficher les modules en fonction du domaine et du lieu (Bien débuter en informatique, Apprendre la bureautique, ...), et c'est au passage de cette 3ème page que je bloque, quand je choisis un domaine et un lieu où il y a 10 formations très exactement ça passe et quand il y a plus de 10 formations ça m'affiche que les 10 premières et en dessous de 10 formations j'ai l'erreur la:[/font]
2012-04-17 16:12:33.379 Catalogue_iPhone1[4270:12203] j 3097
2012-04-17 16:12:33.386 Catalogue_iPhone1[4270:12203] j 3098
2012-04-17 16:12:33.454 Catalogue_iPhone1[4270:12203] idmodlieu 106, idtableau_ 5
2012-04-17 16:12:33.455 Catalogue_iPhone1[4270:12203] idmodlieu 227, idtableau_ 5
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'.
[font=arial,helvetica,sans-serif]Mon code est le suivant : [/font]
[font=arial,helvetica,sans-serif]Je vous remercie d'avance.[/font]
[font=arial,helvetica,sans-serif]Je fais une petite application qui permet de sélectionner des formations.[/font]
[font=arial,helvetica,sans-serif]J'explique : Première page, afficher des domaines (administration, bureautique, informatique, ...), seconde page afficher les lieux de formations, 3ème page afficher les modules en fonction du domaine et du lieu (Bien débuter en informatique, Apprendre la bureautique, ...), et c'est au passage de cette 3ème page que je bloque, quand je choisis un domaine et un lieu où il y a 10 formations très exactement ça passe et quand il y a plus de 10 formations ça m'affiche que les 10 premières et en dessous de 10 formations j'ai l'erreur la:[/font]
2012-04-17 16:12:33.379 Catalogue_iPhone1[4270:12203] j 3097
2012-04-17 16:12:33.386 Catalogue_iPhone1[4270:12203] j 3098
2012-04-17 16:12:33.454 Catalogue_iPhone1[4270:12203] idmodlieu 106, idtableau_ 5
2012-04-17 16:12:33.455 Catalogue_iPhone1[4270:12203] idmodlieu 227, idtableau_ 5
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'.
[font=arial,helvetica,sans-serif]Mon code est le suivant : [/font]
<br />
@implementation ContactViewController<br />
@synthesize monModule,monModule2,monDomaine,monLieu,monModuleLieu;[/color]<br />
[color="#bf2e9d"]// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.<br />
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {<br />
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])<br />
{[/color]<br />
[color="#bf2e9d"] }<br />
return self;<br />
}[/color]<br />
[color="#bf2e9d"]/*<br />
// Implement loadView to create a view hierarchy programmatically, without using a nib<br />
- (void)loadView {<br />
}<br />
*/[/color]<br />
<br />
[color="#bf2e9d"]// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.<br />
- (void)viewDidLoad {[/color]<br />
[color="#bf2e9d"] NSString *iddom_ = monDomaine.id_;<br />
NSString *libdom = monDomaine.lab;<br />
NSString *idlieu = monLieu.id_lieu;<br />
NSString *liblieu = monLieu.lib_lieu;[/color]<br />
[color="#bf2e9d"] tableau = [[NSMutableArray alloc] init];<br />
NSString *monURL = [[NSBundle mainBundle] pathForResource:@"cat_module" ofType:@"xml"];<br />
NSURL *url = [NSURL fileURLWithPath:monURL];<br />
XMLToObjectParser *myParser = [[XMLToObjectParser alloc] parseXMLAtURL:url toObject:@"Module" parseError:nil];<br />
for(int i = 0; i < [[myParser items] count]; i++)<br />
{<br />
monModule = (Module *)[[myParser items] objectAtIndex:i];<br />
NSString *idTableau = [NSString stringWithFormat:@"%@",[[[myParser items] objectAtIndex:i]iddom]];<br />
// NSLog(@"id tab, id domaine %@, %@",idTableau, iddom_);<br />
//[tableau addObject:monModule];<br />
if ([iddom_ isEqualToString:idTableau])<br />
{<br />
[tableau addObject:monModule];<br />
//NSLog(@"j'y suis");<br />
}<br />
}[/color]<br />
[color="#bf2e9d"] tableau_ = [[NSMutableArray alloc] init];<br />
NSString *monURL_ = [[NSBundle mainBundle] pathForResource:@"cat_moduleslieux" ofType:@"xml"];<br />
NSURL *url_ = [NSURL fileURLWithPath:monURL_];<br />
XMLToObjectParser *myParser_ = [[XMLToObjectParser alloc] parseXMLAtURL:url_ toObject:@"Modlieu" parseError:nil];[/color]<br />
[color="#bf2e9d"] int i=[[myParser_ items]count];<br />
for(int j = 0; j < i; j++)<br />
{[/color]<br />
[color="#bf2e9d"] monModuleLieu = (Modlieu *)[[myParser_ items] objectAtIndex:j];[/color]<br />
[color="#bf2e9d"] NSString *idTableau_ = [NSString stringWithFormat:@"%@",[[[myParser_ items] objectAtIndex:j]idlieumod]];<br />
//[tableau_ addObject:monModuleLieu];<br />
NSLog(@"j %d",j);<br />
//[tableau addObject:monModule];<br />
if ([idlieu isEqualToString:idTableau_])<br />
{<br />
[tableau_ addObject:monModuleLieu];<br />
//NSLog(@"j'y suis");<br />
}<br />
}<br />
[super viewDidLoad];<br />
}[/color]<br />
[color="#bf2e9d"]- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {<br />
return [tableau count];<br />
return [tableau_ count];<br />
}<br />
/*<br />
// Override to allow orientations other than the default portrait orientation.<br />
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {<br />
// Return YES for supported orientations<br />
return (interfaceOrientation == UIInterfaceOrientationPortrait);<br />
}<br />
*/[/color]<br />
[color="#bf2e9d"]- (void)didReceiveMemoryWarning {<br />
// Releases the view if it doesn't have a superview.<br />
[super didReceiveMemoryWarning];[/color]<br />
[color="#bf2e9d"]// Release any cached data, images, etc that aren't in use.<br />
}[/color]<br />
[color="#bf2e9d"]- (void)viewDidUnload {[/color]<br />
[color="#bf2e9d"] tableView = nil;<br />
// Release any retained subviews of the main view.<br />
// e.g. self.myOutlet = nil;<br />
}[/color]<br />
<br />
[color="#bf2e9d"]- (void)dealloc {[/color]<br />
[color="#bf2e9d"]}[/color]<br />
[color="#bf2e9d"]- (UITableViewCell *)tableView UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {[/color]<br />
[color="#bf2e9d"] NSString *iddom_= monDomaine.id_;<br />
NSString *idlieu = monLieu.id_lieu;<br />
static NSString *CellIdentifier = @"Cell";<br />
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];<br />
if (cell == nil) {<br />
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;<br />
}[/color]<br />
[color="#bf2e9d"]//NSString *ligneTableau = [NSString stringWithFormat:@"%@ ",[[tableau objectAtIndex:indexPath.row] lab]];<br />
NSString *ligneTableau_ = [NSString stringWithFormat:@"%@ ",[[tableau_ objectAtIndex:indexPath.row] idmodlieu]];<br />
NSString *idTableau_ = [NSString stringWithFormat:@"%@", [[tableau_ objectAtIndex:indexPath.row] idlieumod]];<br />
//NSLog(@"idTableau %@, idlieu %@",idTableau_,idlieu);<br />
cell.text=ligneTableau_;<br />
NSLog(@"idmodlieu %@, idtableau_ %@",[[tableau_ objectAtIndex:indexPath.row] idmodlieu],[[tableau_ objectAtIndex:indexPath.row] idlieumod]);<br />
/* if ([idTableau_ isEqualToString:idlieu])<br />
{<br />
cell.text=ligneTableau2;<br />
NSLog(@"idmodlieu %@",[[tableau_ objectAtIndex:indexPath.row] idmodlieu]);<br />
// cell.text=monModule2.lab;<br />
}*/[/color]<br />
[color="#bf2e9d"] //[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];<br />
//else cell.text=@""; // Configure the cell.<br />
return cell;<br />
}[/color]<br />
[color="#bf2e9d"]- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {<br />
// Navigation logic may go here -- for example, create and push another view controller.<br />
PDF_Module *module_lieu = [[PDF_Module alloc] initWithNibName:@"PDF_Module" bundle:nil];<br />
module_lieu.monModule=[tableau objectAtIndex:indexPath.row];<br />
[self.navigationController pushViewController:module_lieu animated:YES];[/color]<br />
<br />
[color="#bf2e9d"]}<br />
@end<br />
[font=arial,helvetica,sans-serif]Je vous remercie d'avance.[/font]
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu as une exception, regarde pourquoi elle se produit au débogueur, et corrige ton bug.
Et sinon pour ton problème, bah heu... met des breakpoints et regarde pas à pas où ça coince, quoi...
Breakpoints et NSLOG j'ai fait je vois pas d'où vient l'erreur.
Dans la dernière partie :
je souhaiterais faire passer en paramètre ceci qui se trouve dans le Didload dans le tab_fin :
Une idée ?
Merci.
Bien sur faut setter quelque petit truc dans PDF_Module... (Pourquoi y'a un '_' ?)
Google est ton ami sinon, je vois pas comment tu pourrais avoir des soucis, vu que tu l'as deja fait pour une autre variable /rolleyes.gif' class='bbc_emoticon' alt='::)' />
Je suis débutant en programmation je me sers de beaucoup de tutos à vrai dire, setter ?
Pour le _ je met beaucoup de _ dans mes classes, projet etc ça gêne ou c'est une question comme ça ?
Regarde dans ton PDF_Module ce que tu as mis comme propriété pour la variable monModFin et fait de même (ou quasiment) pour celle que
tu veux passer en paramètre. Puis apres tu feras pdfmodule.tavariable = @ta string;
Tu peux me dire exactement ce que cela fait ? /wink.png' class='bbc_emoticon' alt=';)' />
Je vois pas ton problème sérieusement, tu déclares:
En mettant au préalable la variable dans ta classe.
Et apres tu fais:
Ce que je comprend pas dans ta démarche, c'est que tu l'as fait pour un autre objet, mais tu sais pas le refaire ?
Donc je me pose une question, sais-tu ce que tu fais ?
Essai de comprendre ton code aulieu de te noyer dedans.. /rolleyes.gif' class='bbc_emoticon' alt='::)' />
Ou alors j'ai pas du tout compris ce que tu veux /xd-laugh.gif' class='bbc_emoticon' alt='xd' />
En faite, dans :
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
PDF_Module *pdfmodule= [/color][color=#4b8186]PDF_Module[/color][color=#000000] [/color]alloc[color=#000000 initWithNibName:@PDF_Module bundle:nil];
pdfmodule.monModFin= color=#4b8186]tab_fin[/color] [color=#3f217c]objectAtIndex[/color]:indexPath.[color=#7340a3]row[/color;
NSLog(@idmodule_ en bas%@", color=#4b8186]tab_idfin[/color] [color=#3f217c]objectAtIndex[/color]:indexPath.[color=#7340a3]row[/color);
/color][color=#bf2e9d]self[/color][color=#000000].[/color][color=#7340a3]navigationController[/color][color=#000000] [/color]pushViewController[color=#000000]:pdfmodule [/color]animated[color=#000000]:[/color][color=#bf2e9d]YES[/color][color=#000000;
}
Je voudrais retourner la valeur [NSString stringWithFormat:@%@", [/color][color=#4b8186]tableau[/color][color=#000000] [/color]objectAtIndex[color=#000000]:idw] [/color][color=#2e595d]id_[/color][color=#000000];
Or quand je cherche à l'affecter à une variable public cela me renvoie le résultat (NULL)
par exemple je vais juste changer les noms pour être plus clair : modFin.monId = [/color]tableau[color=#000000] [/color][color=#3F217C]objectAtIndex[/color][color=#000000]:idw] [/color][color=#2E595D]id_[/color][color=#000000 ; ne passe pas, quand je fais NSLOG de modfin.monId j'ai (null) et de [/color]tableau[color=#000000] [/color][color=#3F217C]objectAtIndex[/color][color=#000000]:idw] [/color][color=#2E595D]id_[/color][color=#000000 j'ai la bonne valeur.
C'est ça le problème, je voudrais mettre résultat de [/color]tableau[color=#000000] [/color][color=#3F217C]objectAtIndex[/color][color=#000000]:idw] [/color][color=#2E595D]id_[/color][color=#000000 dans une variable mais ça ne passe pas.
Try this :
J'aimerai pouvoir faire cela en faite, mais labmod n'est pas possible.
Or l'affectation ne se fait pas ?! Le NSLog(@idbesoin %@, monmodfin.lab %@",modFin.idbesoin,modFin.labmod); me renvoie NULL
avec modFin.h :
Cette fonction :
- (UITableViewCell *)tableView /sad.png' class='bbc_emoticon' alt=':(' />UITableView *)tableView cellForRowAtIndexPath/sad.png' class='bbc_emoticon' alt=':(' />NSIndexPath *)indexPath
n'est appelé que si la cellule est affiché, alors ne fait pas trop de boulot de lecture dedans mais sépare
la realisation des array et la demande de cellule.
Je suis certain que 10 est la limite de tes cellules affichées !
jfp
Problème avec l'affectation de modFin :
Or l'affectation ne se fait pas ?! Le NSLog(@idbesoin %@, monmodfin.lab %@",modFin.idbesoin,modFin.labmod); me renvoie NULL alors que idbesoin ([NSString stringWithFormat"%@", [/color][color=#000000]tableau objectAtIndex[/color][color=#666600]:[/color][color=#000000]idw[/color][color=#666600 id_]]; et labmod ([NSString stringWithFormat"%@", [/color][color=#000000]tableau objectAtIndex[/color][color=#666600]:[/color][color=#000000]idw[/color][color=#666600 lab]]; me renvoie la bonne valeur.
avec modFin.h :
Ou est-ce que tu initialise - déclares - ton pointeur de type ModFin ?
Si tu alloc pas ton pointeur, lui demander pas de te faire le cafe ! On est pas en Java ici /angry.gif' class='bbc_emoticon' alt='>:(' /> (troll: off)