J'ai un contrôleur de vue de sélection pour sélectionner une source chimique et éventuellement une concentration. Si la source n'a pas de concentrations, elle ne présente qu'un seul sélecteur. Il est rempli par un NSDictionary
avec les noms de type source comme keys
et un objet de modèle personnalisé que j'ai créé appelé Chemical
qui a quatre propriétés, deux NSString
, un float
et un BOOL
.Pourquoi cette boucle for n'est-elle pas exécutée?
Lorsque je déclenche cela avec un dictionnaire qui a 2 composants, je veux extraire les quatre valeurs du Chemical
qui est représenté. Notez que je remplis le sélecteur avec les valeurs des deux premières propriétés, mais pas le float
ou le BOOL
. Je parcours le tableau pour la clé qui est sélectionnée dans le premier composant et vérifie la chaîne du deuxième composant par rapport à la propriété chemConcentration
de chacun des Chemical
s dans le tableau clé/valeur. Lorsque le chemConcentration
correspond, je sais que j'ai le droit Chemical
et je peux obtenir ses propriétés à renvoyer.
Ouf! Le problème est que même si je sais que j'arrive à la boucle for, elle semble être ignorée. Le NSLog
juste avant qu'il imprime, mais l'intérieur ne le fait pas. sourceConstant
et sourceIsLiquid
séjour 0.0
et NO
- (IBAction)selectedSourceButton {
NSLog(@"selectedSourceButton pressed");
NSInteger sourceRow = [picker selectedRowInComponent:kSourceComponent];
NSString *selectedSource = [self.sources objectAtIndex:sourceRow];
NSArray *selectedChemicalGroup = [dictionaryOfSources objectForKey:selectedSource];
NSInteger concentrationRow = [picker selectedRowInComponent:kConcentrationComponent];
NSString *selectedConcentration = [[NSString alloc] init];
float selectedConstant = 0.0;
BOOL selectedIsLiquid = NO;
if (numberOfComponents == 2) {
NSLog(@"numberOfComponents = 2 if/then chosen"); // <-- This prints.
selectedConcentration = [self.concentrations objectAtIndex:concentrationRow];
NSLog(@"begin selectedConcentration for loop. Number of loops = %d", [selectedChemicalGroup count]); // <-- And so does this.
for (int i; i<[selectedChemicalGroup count]; i++) { // <-- But this doesn't seem to fire!
NSLog(@"selectedConcentration = %@, from selectedChemicalGroup = %@", selectedConcentration, [[selectedChemicalGroup objectAtIndex:i] chemConcentration]); // <-- Because this doesn't print.
if ([selectedConcentration isEqualToString:[[selectedChemicalGroup objectAtIndex:i] chemConcentration]]) {
selectedConstant = [[selectedChemicalGroup objectAtIndex:i] chemConstant];
selectedIsLiquid = [[selectedChemicalGroup objectAtIndex:i] chemIsLiquid];
}
}
}
else {
selectedConcentration = @"";
selectedConstant = [[selectedChemicalGroup objectAtIndex:0] chemConstant];
selectedIsLiquid = [[selectedChemicalGroup objectAtIndex:0] chemIsLiquid];
}
NSLog(@"selectedSourceButton source to return = %@, concentration = %@, sourceConstant = %1.7f, isLiquid = %d", selectedSource, selectedConcentration, selectedConstant, selectedIsLiquid);
if ([self.delegate respondsToSelector:@selector (sourcePickerViewController:didSelectSource:andConcentration:andConstant:andIsLiquid:)]) {
[self.delegate sourcePickerViewController:self didSelectSource:selectedSource andConcentration:selectedConcentration andConstant:selectedConstant andIsLiquid:selectedIsLiquid];
}
}
+ pour le dénombrement rapide – Vladimir