UIPicker с несколькими компонентами сбоя - PullRequest
0 голосов
/ 17 октября 2011

Я пытаюсь создать приложение, используя UIPickerView из трех компонентов. Первый компонент имеет 3 строки. Второй компонент имеет 6 строк, а третий компонент имеет 12 строк. Каждый раз, когда я прокручиваю строку 3 в компонентах 2 или 3, происходит сбой приложения и указывает на первый массив компонентов. Я уверен, что это легко исправить, но я заблудился. Заранее спасибо.

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component

{    
{
    NSString *resultString0 = [[NSString alloc] initWithFormat:
                              @"Sensor: %@",
                              [modelArray objectAtIndex:row]];        
    modelLabel.text = resultString0;
    [resultString0 release];   
}
{
    NSString *resultString1 = [[NSString alloc] initWithFormat:
                              @"Pixels: %@",
                              [memoryArray objectAtIndex:row]];
    memoryLabel.text = resultString1;
    [resultString1 release];

    NSString *firstString = horizFaceRecLabel.text;
    float horizontalFace = [[horizontalArray objectAtIndex:row] floatValue];
    float requiredFace = 100;
    output1 = [firstString floatValue];
    output1 = horizontalFace / requiredFace;
    horizFaceRecLabel.text = [NSString stringWithFormat:(@"%.1f ft"), output1];

    NSString *secondString = horizLicensePlateLabel.text;
    float horizontalLicense = [[horizontalArray objectAtIndex:row] floatValue];
    float requiredLicense = 45;
    output2 = [secondString floatValue];
    output2 = horizontalLicense / requiredLicense;
    horizLicensePlateLabel.text = [NSString stringWithFormat:(@"%.1f ft"), output2];

    NSString *thirdString = horizVisualIdLabel.text;
    float horizontalVisual = [[horizontalArray objectAtIndex:row] floatValue];
    float requiredVisual = 30;
    output3 = [thirdString floatValue];
    output3 = horizontalVisual / requiredVisual;
    horizVisualIdLabel.text = [NSString stringWithFormat:(@"%.1f ft"), output3];

}
{
    NSString *resultString2 = [[NSString alloc] initWithFormat:
                              @"Lens: %@",
                              [lensArray objectAtIndex:row]];
    lensLabel.text = resultString2;
    [resultString2 release];

    {
        NSString *firstDistString = faceRecLabel.text;
        float angle = [[anglesArrayA objectAtIndex:row] floatValue];
        float densityOne;
        float densityTwo;
        densityOne = [firstDistString floatValue];
        densityTwo = (output1/2)/(sin(angle/2));
        faceRecLabel.text = [NSString stringWithFormat:(@"%.1f ft"), densityTwo];
    }
}
}

1 Ответ

1 голос
/ 17 октября 2011

Похоже, вам не хватает некоторых if операторов для управления при вызове каждого блока кода.

У вас есть три отдельных блока кода, предположительно для каждого компонента, но, поскольку нет условий для управленияВсе блоки выполняются всякий раз, когда выбирается строка в любом компоненте.(В третьем блоке также есть еще один блок - не знаю, почему вы так написали.)

Когда вы выходите за пределы строки 3 во 2-м и 3-м компонентах, код для 1-гоКомпонент запускается и аварийно завершает работу, когда пытается получить 4-ю строку в массиве для компонента 1 (который не существует).

Поскольку индексы компонентов начинаются с нуля, условия должны быть примерно такими:

if (component == 0)
{
    //code for 1st component here...
}
else if (component == 1)
{
    //code for 2nd component here...
}
else if (component == 2)
{
    //code for 3rd component here...
}

Вместо этого вы также можете использовать оператор switch.

...