1

UIPickerViewの使用方法を学習しようとしていますが、アラートビューが常に配列の最初の要素(ピッカー)を他の要素と比較して出力する理由がわかりません。ピッカーのボタン押下を次のように定義しています。

- (IBAction)buttonPressed {
    NSInteger row = [myPicker selectedRowInComponent:0];
    NSString *s = [myPickerData objectAtIndex:row];
    NSLog(@"%@", s);
    NSString *title = [[NSString alloc] initWithFormat:@"You selected, %@", s];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                                                    message:@"Message"
                                                   delegate:nil
                                          cancelButtonTitle:@"ok"
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];
    [title release];
}

私の配列は次のように定義されています:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *array = [[NSArray alloc] initWithObjects:@"0", @"1", @"2", nil];
    self.myPickerData = array;
    [array release];
}

ピッカーが変更されたときに出力をログに記録すると、それに応じて値が0、1、2に変更されます。

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSLog(@"%@", [myPickerData objectAtIndex:row]);
}

ただし、アラートビューは機能しません。ですから、ここで何が間違っているのかわかりません。

4

1 に答える 1

1

nibファイル、特にmyPickerアウトレットからUIPickerViewインスタンスへの接続が欠落していると思われます。その場合、myPickernilになるので、行

NSInteger row = [myPicker selectedRowInComponent:0];

行は常に0に設定されます。これは、配列の最初の項目を常に表示している理由を説明しています。

nibファイルをチェックする以外に、buttonPressedメソッドにブレークポイントを設定し、myPickerがnilであるかどうかをチェックすることで、これを確認することもできます。

UIPickerViewのデリゲート/データソースアウトレットからコントローラークラスへの接続があります。これが、デリゲートメソッドが呼び出されている理由です。ただし、ボタンメソッドが正しく機能するには、反対方向に接続する必要があります。

于 2009-12-13T00:37:52.837 に答える