1

だから私はコンバーターアプリを作っています、そして私はif私の答えを計算するためにステートメントを使うときに問題に遭遇しました。をUIPickerWheel選択convertFromconvertTotextFieldを入力します。

私の問題は、以下のコードを使用すると、回答ラベルに、で選択された単位ではなく、ランダムな単位が表示されるだけであるということpickerWheelです。

私のせいは、if両方が同じものであるかどうかをチェックしていないステートメントであり、そのうちの1つだけだと思います。両方が真であることを確認するにはどうすればよいですか、または適切な方法でそれを行うにはどうすればよいですか?

プロジェクト全体をダウンロード

コード:

#pragma mark -
#pragma mark PickerView Delegate
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component
{
    float convertFrom = [[_convertRates objectAtIndex:[pickerView selectedRowInComponent:0]] floatValue];
    float convertTo = [[_convertRates objectAtIndex:[pickerView selectedRowInComponent:1]] floatValue];
    float input = [inputText.text floatValue];
    float to = convertTo;
    float from = convertFrom;
    float convertValue = input;
    float mtpaTilMtpaFloat = convertValue * 1;
    float mtpaTilMMcfdayFloat = convertValue * 2;
    float mtpaTilMillSm3dayFloat = convertValue * 3;
    float mtpaTilMMBTUFloat = convertValue * 4;
    float mtpaTilPJPAFloat = convertValue * 5;
    float MMcfdayTilmtpaFloat = convertValue * 0.5;
    float MMcfdayTilMMcfdayFloat = convertValue * 1;
    float MMcfdayTilMillSm3dayFloat = convertValue *6;
    float MMcfdayTilMMBTUFloat = convertValue *7;
    float MMcfdayTilPJPAFloat = convertValue *8;
    float MillSm3dayTilMTPAFloat = convertValue /3;

    NSString *mtpaTilmtpa = [[NSString alloc ] initWithFormat:
                             @" %f MTPA = %f MTPA", convertValue, mtpaTilMtpaFloat];

    NSString *mtpaTilMMcfday = [[NSString alloc ] initWithFormat:
                                @" %f MTPA = %f MMcf/day", convertValue, mtpaTilMMcfdayFloat];

    NSString *mtpaTilMillSm3day = [[NSString alloc] initWithFormat:
                                   @" %f MTPA = %f Mill.SM3/day", convertValue, mtpaTilMillSm3dayFloat];

    NSString *mtpaTilMMBTU = [[NSString alloc] initWithFormat:
                              @" %f MTPA = %f MMBTU", convertValue, mtpaTilMMBTUFloat];

    NSString *mtpaTilPJPA = [[NSString alloc] initWithFormat:
                             @" %f MTPA = %f PJPA", convertValue, mtpaTilPJPAFloat];



    NSString *MMcfdayTilmtpa = [[NSString alloc] initWithFormat:
                                @" %f MMcfday = %f MTPA", convertValue, MMcfdayTilmtpaFloat];

    NSString *MMcfdayTilMMcfday = [[NSString alloc] initWithFormat:
                                   @" %f MMcfday = %f MMcfday", convertValue, MMcfdayTilMMcfdayFloat];

    NSString *MMcfdayTilMillSm3day = [[NSString alloc] initWithFormat:
                                      @" %f MMcfday = %f MillSm3day", convertValue, MMcfdayTilMillSm3dayFloat];

    NSString *MMcfdayTilMMBTU = [[NSString alloc] initWithFormat:
                                 @" %f MMcfday = %f MMBTU", convertValue, MMcfdayTilMMBTUFloat];

    NSString *MMcfdayTilPJPA = [[NSString alloc] initWithFormat:
                                @" %f MMcfday = %f PJPA", convertValue, MMcfdayTilPJPAFloat];


    NSString *MillSm3dayTilMTPA = [[NSString alloc] initWithFormat:
                                   @" %f MillSm3day = %f MTPA", convertValue, MillSm3dayTilMTPAFloat];


    if (from = 1, to == 1) { resultLabel.text = mtpaTilmtpa;
    }
    if (from = 1, to == 2) { resultLabel.text = mtpaTilMMcfday;
    }
    if (from = 1, to == 3) { resultLabel.text = mtpaTilMillSm3day;
    }
    if (from = 1, to == 4) { resultLabel.text = mtpaTilMMBTU;
    }
    if (from = 1, to == 5) { resultLabel.text = mtpaTilPJPA;
    }
    if (from = 2, to == 1) { resultLabel.text = MMcfdayTilmtpa;
    }
    if (from = 2, to == 2) { resultLabel.text = MMcfdayTilMMcfday;
    }
    if (from = 2, to == 3) { resultLabel.text = MMcfdayTilMillSm3day;
    }
    if (from = 2, to == 4) { resultLabel.text = MMcfdayTilMMBTU;
    }
    if (from = 2, to == 5) { resultLabel.text = MMcfdayTilPJPA;
    }
    if (from = 3, to == 1) { resultLabel.text = MillSm3dayTilMTPA;
    }
}

ありがとう。

4

2 に答える 2

2

=ほとんどのステートメントには1つしかありません。double equals()を使用する必要があります==。シングル=は値をに割り当てますがfrom、等しいかどうかはチェックしません。,また、をに置き換え&&ます。if最後に行うことの1つは、ステートメントの共通部分を組み合わせることです。

if (from == 1) { 
    if (to == 1) {
        resultLabel.text = mtpaTilmtpa;
    }
    else if (to == 2) { 
        resultLabel.text = mtpaTilMMcfday;
    }
    else if (to == 3) { 
        resultLabel.text = mtpaTilMillSm3day;
    }
    else if (to == 4) { 
        resultLabel.text = mtpaTilMMBTU;
    }
    else if (to == 5) { 
        resultLabel.text = mtpaTilPJPA;
    }
}
else if (from == 2) { 
    if (to == 1) {
        resultLabel.text = MMcfdayTilmtpa;
    }
    else if (to == 2) { 
        resultLabel.text = MMcfdayTilMMcfday;
    }
    else if to == 3) { 
            resultLabel.text = MMcfdayTilMillSm3day;
    }
    else if (to == 4) { 
        resultLabel.text = MMcfdayTilMMBTU;
    }
    else if (to == 5) { 
        resultLabel.text = MMcfdayTilPJPA;
    }
}
else if (from == 3 && to == 1) { 
    resultLabel.text = MillSm3dayTilMTPA;
}
于 2012-10-13T19:44:27.207 に答える
1

これらすべてのifステートメントの使用は、適切にスケーリングされません。ラベルを含む配列の配列が必要です。次に、2つのコンポーネントから選択したピッカー行を使用して、配列の要素にアクセスします。次に、すべてのifステートメントが3行のコードのようなものに削減されます。

于 2012-10-13T19:54:20.603 に答える