NSMenu limite capacité?
Rocou
Membre
Bonjour,
Pour alimenter des NSpopupButton J'utilise une méthode qui jusqu'à présent fonctionnait très bien.
Or ma nouvelle application plante sur cette méthode. En jouant sur le nombre d'éléments, l'application fonctionne ou plante (trop d'éléments?).
Est-ce un problème d'allocation? De limite de capacité de NSMenu?
Voici mon code:
Pour alimenter des NSpopupButton J'utilise une méthode qui jusqu'à présent fonctionnait très bien.
Or ma nouvelle application plante sur cette méthode. En jouant sur le nombre d'éléments, l'application fonctionne ou plante (trop d'éléments?).
Est-ce un problème d'allocation? De limite de capacité de NSMenu?
Voici mon code:
- (void) initPopClient:(id)sender<br />{<br /> NSDictionary *leDico;<br /> PGSQLRecordset *rs;<br /> <br /> NSMenu *popClientMenu = [[[NSMenu alloc] init] autorelease];<br /> <br /> [popClient removeAllItems];<br /> <br /> NSString *query = @"SELECT nom, id FROM clients ORDER BY nom";<br /> <br /> rs = [connection open:query];<br /> if (rs != nil) {<br /> if (![rs isEOF])<br /> {<br /> NSInteger i=0; <br /> <br /> while (![rs isEOF])<br /> {<br /> <br /> leDico=[rs dictionaryFromRecord];<br /> <br /> [popClient addItemWithTitle:[leDico valueForKey:@"nom"]];<br /> <br /> //Association de l'identifiant PostgreSQL avec le titre du PopPup (nom du client)<br /> NSString *k=[leDico valueForKey:@"id"];<br /> NSInteger j=[k integerValue];<br /> <br /> popClientMenu = [popClient menu];<br /> [[popClientMenu itemAtIndex:i] setTag:j]; //************ça plante ici!<br /> <br /> <br /> i=i++;<br /> [rs moveNext];<br /> } <br /> <br /> <br /> }<br /> <br /> <br /> } else <br /> {<br /> NSLog(@"Impossible de récupérer les données: %@", [connection lastError]);<br /> }<br /> [rs close]; <br />}<br />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Vérifie que [popClientMenu itemAtIndex:i] renvoie bien quelque chose.
IBOutlet NSPopUpButton *popClient;
Dans la boucle j'ai inséré: NSLog(@[popClientMenu itemAtIndex:i]: %@", [popClientMenu itemAtIndex:i]);
A priori, ça renvoie bien ce qu'il faut.
Voici l'erreur obtenue:
009-07-01 11:52:06.423 planning[6049:10b] *** Assertion failure in -[NSMenu itemAtIndex:], /SourceCache/AppKit/AppKit-949.46/Menus.subproj/NSMenu.m:819
2009-07-01 11:52:06.423 planning[6049:10b] An uncaught exception was raised
2009-07-01 11:52:06.424 planning[6049:10b] Invalid parameter not satisfying: (index >= 0) && (index < (_itemArray ? CFArrayGetCount((CFArrayRef)_itemArray) : 0))
2009-07-01 11:52:06.424 planning[6049:10b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: (index >= 0) && (index < (_itemArray ? CFArrayGetCount((CFArrayRef)_itemArray) : 0))'
2009-07-01 11:52:06.425 planning[6049:10b] Stack: (
2483339435,
2487115323,
2483338891,
2438696580,
2451707209,
19799,
15174,
2483398837,
2451571690,
2451531286,
2451529592,
2451528635,
2451528441,
2451527592,
10924,
10850
)
Déjà vire:
Je dirais qu'on n'est pas sûr que [leDico valueForKey:@nom] va renvoyer une NSString: la requête peut foirer.
Plus simplement i++;
Pas trop d'autres idées pour l'instant !
Ben si, je l'utilise afin d'initialiser le tag.
Je vais travailler la dessus.
Tant pis, merci pour le temps passé!
Sinon, ce n'est pas une question de capacité, j'ai testé sur d'autres zones et on dépasse allègrement la limite à laquelle je pensais.
Ca ne devrait plus planter ...
Effectivement, merci beaucoup.
Visiblement, je ne maitrise pas du tout les classes NSMenu et NSMenuItem