У меня есть контроллер для выбора, чтобы выбрать источник химического вещества и, возможно, концентрацию. Если источник не имеет концентраций, он просто представляет один сборщик. Он заполняется NSDictionary
с именами типа источника как keys
и пользовательский объект модели, который я сделал, называется Chemical
, который имеет четыре свойства, два NSString
, один float
и один BOOL
.Почему это не выполняется для цикла?
Когда я вызываю это со словарем, который имеет 2 компонента, я хочу извлечь четыре значения из представленного Chemical
. Обратите внимание, что я заполняю сборщик значениями из первых двух свойств, но не float
или BOOL
. Я запускаю массив для ключа, выбранного в первом компоненте, и проверяет строку со второго компонента на свойство chemConcentration
от каждого из Chemical
s в массиве key/value. Когда совпадают chemConcentration
, я знаю, что имею право Chemical
, и я могу получить его свойства для отправки назад.
Whew!
Проблема в том, что, хотя я знаю, что добираюсь до цикла for, кажется, что ее пропускают. NSLog
прямо перед этим печатает, но внутри внутри нет. sourceConstant
и sourceIsLiquid
пребывание 0.0
и 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];
}
}
+ для быстрого перечисления – Vladimir