-1

を使用して UIPickerView にデータを入力しようとしarray = [[NSArray alloc] initWithObjects=@"1",@"1.2"....@"50.0",nil]ました。しかし、問題は、TabBarController でビューをクリックするとビューが自動的にクラッシュすることです。また、これには多くの作業が伴います。これを達成するための最もエレガントな方法は何ですか?

更新: エラーでビューをクラッシュさせるコードは次のとおりです - 「lldb」。ここで問題を教えてもらえますか?

- (void)viewDidLoad
{

    kms = [[NSArray alloc] initWithObjects:@"1",@"1.1",@"1.2",@"1.3",@"1.4",@"1.5",@"1.6",@"1.7",@"1.8",@"1.9",@"2.0",@"2.1",@"2.2",@"2.3",@"2.4",@"2.5",@"2.6",@"2.7",@"2.8",@"2.9",@"3.0",@"3.1",@"3.2",@"3.3",@"3.4",@"3.5",@"3.6",@"3.7",@"3.8",@"3.9",@"4.0",@"4.1",@"4.2",@"4.3",@"4.4",@"4.5",@"4.6",@"4.7",@"4.8",@"4.9",@"5.0",@"5.1",@"5.2",@"5.3",@"5.4",@"5.5",@"5.6",@"5.7",@"5.8",@"5.9",@"6.0",@"6.1",@"6.2",@"6.3",@"6.4",@"6.5",@"6.6",@"6.7",@"6.8",@"6.9",@"7.0",@"7.1",@"7.2",@"7.3",@"7.4",@"7.5",@"7.6",@"7.7",@"7.8",@"7.9",@"8.0",@"8.1",@"8.2",@"8.3",@"8.4",@"8.5",@"8.6",@"8.7",@"8.8",@"8.9",@"9.0",@"9.1",@"9.2",@"9.3",@"9.4",@"9.5",@"9.6",@"9.7",@"9.8",@"9.9",@"10.0",@"10.1",@"10.2",@"10.3",@"10.4",@"10.5",@"10.6",@"10.7",@"10.8",@"10.9",@"11.0",@"11.1",@"11.2",@"11.3",@"11.4",@"11.5",@"11.6",@"11.7",@"11.8",@"11.9",@"12.0",@"12.1",@"12.2",@"12.3",@"12.4",@"12.5",@"12.6",@"12.7",@"12.8",@"12.9",@"13.0",@"13.1",@"13.2",@"13.3",@"13.4",@"13.5",@"13.6",@"13.7",@"13.8",@"13.9",@"14.0",@"14.1",@"14.2",@"14.3",@"14.4",@"14.5",@"14.6",@"14.7",@"14.8",@"14.9",@"15.0",@"15.1",@"15.2",@"15.3",@"15.4",@"15.5",@"15.6",@"15.7",@"15.8",@"15.9",@"16.0",@"16.1",@"16.2",@"16.3",@"16.4",@"16.5",@"16.6",@"16.7",@"16.8",@"16.9",@"17.0",@"17.1",@"17.2",@"17.2",@"17.3",@"17.4",@"17.5",@"17.6",@"17.7",@"17.8",@"17.9",@"18.0",@"18.1",@"18.2",@"18.3",@"18.4",@"18.5",@"18.6",@"18.7",@"18.8",@"18.9",@"19.0",@"19.1",@"19.2",@"19.3",@"19.4",@"19.5",@"19.6",@"19.7",@"19.8",@"19.9",@"20.0",@"20.1",@"20.2",@"20.3",@"20.4",@"20.5",@"20.6",@"20.7",@"20.8",@"20.9",@"30.0",@"31.1",@"31.2",@"31.3",@"31.4",@"31.5",@"31.6",@"31.7",@"31.8",@"31.9",@"32.0",@"32.1",@"32.2",@"32.3",@"32.4",@"32.5",@"32.6",@"32.7",@"32.8",@"32.9",@"33.0",@"33.1",@"33.2",@"33.3",@"33.4",@"33.5",@"33.6",@"33.7",@"33.8",@"33.9",@"34.0",@"34.1",@"34.2",@"34.3",@"34.4",@"34.5",@"34.6",@"34.7",@"34.8",@"34.9",@"35.0",@"35.1",@"35.2",@"35.3","@35.4",@"35.5",@"35.6",@"35.7",@"35.8",@"35.9",@"36.0",@"36.1",@"36.2",@"36.3",@"36.4,"@"36.5",@"36.6",@"36.7",@"36.8",@"36.9",@"37.0",@"37.1",@"37.2",@"37.3",@"37.4",@"37.5",@"37.6",@"37.7",@"37.8",@"37.9",@"38.0",@"38.1",@"38.2",@"38.3",@"38.4",@"38.5",@"38.6",@"38.7",@"38.8",@"38.9",@"40.0",@"40.1",@"40.2",@"40.3",@"40.4",@"40.5",@"40.6",@"40.7",@"40.8",@"40.9",@"41.0",@"41.1",@"41.2",@"41.3",@"41.4",@"41.5",@"41.6",@"41.7",@"41.8",@"41.9",@"42.0",@"42.1",@"42.2",@"42.3",@"42.4",@"42.5",@"42.6",@"42.7",@"42.8",@"42.9",@"43.0",@"43.1",@"43.2",@"43.3",@"43.4",@"43.5",@"43.6",@"43.7",@"43.8",@"43.9",@"44.0",@"44.1",@"44.2",@"44.3",@"44.4",@"44.5",@"44.6",@"44.7",@"44.8",@"44.9",@"45.0",@"45.1",@"45.2",@"45.3",@"45.4",@"45.5",@"45.6",@"45.7",@"45.8",@"45.9",@"46.0",@"46.1",@"46.2",@"46.3",@"46.4",@"46.5",@"46.6",@"46.7",@"46.8",@"46.9",@"47.0",@"47.1",@"47.2",@"47.3",@"47.4",@"47.5",@"47.6",@"47.7",@"47.8",@"47.9",@"48.0",@"48.1",@"48.2",@"48.3",@"48.4",@"48.5",@"48.6",@"48.7",@"48.8",@"48.9",@"49.0",@"49.1",@"49.2",@"49.3",@"49.4",@"49.5",@"49.6",@"49.7",@"49.8",@"49.9",@"50.0",nil];



    [super viewDidLoad];
    // Do any additional setup after loading the view.
}







- (NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

        return kms.count; 

    }





- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {



        return [kms objectAtIndex:row];
    }




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

        [kms objectAtIndex:row];

    }
4

2 に答える 2

1

クラスを UIPickerView のデリゲートおよびデータ ソースに設定し、これらのメソッドを実装します。

@synthesize pickerView, entries;

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [entries count];
}

- (NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [entries objectAtIndex: row];
}

@end

エントリは、フォーマットされたすべての数値を含む配列です。アプリがクラッシュする理由も知りたい場合は、コードを投稿してください。

編集

ビューの入力について: ビューでは、load メソッドが配列の入力を開始しました。値をピッカー ビューにプッシュすることについて心配する必要はありません。値は自動的に読み込まれます。

entires=[NSMutableArray new];
for(float i=1.0; i<=50.0; i+= 0.1)
{
    NSString* pushString=[NSString stringWithFormat: @"%f",i];
    [entries addObject: pushString];
}

これにより、ピッカー ビューが 1.0 、1.1、1.2、1.3 などと表示されます。

于 2012-11-10T21:39:43.963 に答える
1

「エレガント」とは、配列にデータを入力せずに簡単な方法を意味する場合は、次のようにします。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return 500 - 10 + 1; // 1.0 to 50.0 is 491 total rows
}

- (NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    // row 0 becomes 1.0, row 1 becomes 1.1, etc.
    float num = row / 10.0 + 1.0;

    return [_formatter stringFromNumber:@(num)];
}

- (Void)viewDidLoad {
    [super viewDidLoad];

    // _formatter is an NSNumberFormatter * ivar
    _formatter = [[NSNumberFormatter alloc] init];
    [_formatter setNumberStyle: NSNumberFormatterDecimalStyle];
    [_formatter setMaximumFractionDigits:1];
}

数値フォーマッタは、ユーザーのロケールに合わせて小数が適切にフォーマットされるようにするために使用されます。

于 2012-11-10T22:56:27.113 に答える