私はこことここで同様の質問を見つけました。stackoverflow や Apple の開発者フォーラムにあるこれらの質問やその他の質問への回答を試してみましたが、うまくいきませんでした。
これをテストするために新しいプロジェクトを作成しましたが、その新しいプロジェクトでは問題なく動作します。新しいテスト プロジェクトとこの問題が発生しているプロジェクトとの相違点を繰り返し削除しています。どんなポインタでも最も役に立ちます。
UIPickerView
ビューコントローラーに接続しています。UIPickerView
ユーザーが選択した最後の値に初期化したい。ただし、この行がピッカーの最後の行である場合は、UI で選択された最後から 2 番目の行が代わりに表示されます。
UIPickerView
一方、ログには、オブジェクト インスタンスで選択された正しい行インデックスが表示されます。
ピッカーで最後の行以外の行を選択しても問題ありません。
、、およびselectRow:inComponent:animated
からメソッドを呼び出してみましたが、どれも違いはありません。また、行の選択とデータの初期化に関連してさまざまな順序で呼び出してみましたが、やはり違いはありません。viewDidLoad
viewWillAppear
viewDidAppear
reloadAllComponents
いくつかのコード:
- (void)viewDidLoad
{
[super viewDidLoad];
NSParameterAssert(self.pickerView);
// Set pickerView data
self.pickerOptions = @[@"zero", @"one", @"two", @"three", @"four"];
// Picker View config
self.pickerView.dataSource = self;
self.pickerView.delegate = self;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSInteger selectedIndex = ([self.pickerOptions count] -1);
NSLog(@"About to select row: %d", selectedIndex);
[self.pickerView selectRow:selectedIndex inComponent:0 animated:NO];
NSLog(@"Selected value is %d", [self.pickerView selectedRowInComponent:0]);
}
#pragma mark UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
NSInteger numRows = [self.pickerOptions count];
NSLog(@"numRows: %d", numRows);
return numRows;
}
#pragma mark UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSString *rowTitle = [self.pickerOptions objectAtIndex:(NSUInteger)row];
return rowTitle;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSString *value = [self.pickerOptions objectAtIndex:(NSUInteger)row];
NSLog(@"User selected value: %@", value);
NSLog(@"index: %d", row);
}
ログ出力:
-[CCSelectorViewController viewDidAppear:] 行インデックスを選択しようとしています: 4
-[CCSelectorViewController pickerView:numberOfRowsInComponent:] numRows: 5
-[CCSelectorViewController viewDidAppear:] 選択された行インデックスは 4
間違った行が選択されているスクリーンショットを次に示します。
これは iOS6、XCode 4.6.1 を使用しています。
何か案は?