UIPickerView には本当に耐え難い問題があります。2 つのコンポーネントがあります。1 つ目は食品カテゴリ、2 つ目は各カテゴリ内の食品です。次のような食品を含む適切な配列があります。
ViewController.h
@property (strong, nonatomic) NSArray *leftPickerDataSource;
@property (strong, nonatomic) NSArray *vegetablesDataSource;
@property (strong, nonatomic) NSArray *eggsDataSource;
@property (strong, nonatomic) NSArray *pastaDataSource;
@property (strong, nonatomic) NSArray *riceDataSource;
@property (strong, nonatomic) NSArray *meatDataSource;
ViewController.m
...
@implementation ViewController
@synthesize foodPicker;
@synthesize leftPickerDataSource;
@synthesize vegetablesDataSource;
@synthesize eggsDataSource;
@synthesize pastaDataSource;
@synthesize riceDataSource;
@synthesize meatDataSource;
- (void)viewDidLoad
{
[super viewDidLoad];
self.leftPickerDataSource = [NSArray arrayWithObjects: @"Vegetables", @"Eggs", @"Pasta", @"Rice", @"Meat", nil];
self.vegetablesDataSource = [NSArray arrayWithObjects:@"Potatoes", @"Broad bean", @"Beans", @"Broccoli", @"Cabbage", @"Cauliflower", @"Corn", nil];
self.eggsDataSource = [NSArray arrayWithObjects:@"Soft-boiled", @"Hard-boiled", nil];
self.pastaDataSource = [NSArray arrayWithObjects:@"Pasta", @"Spaghetti", nil];
self.riceDataSource = [NSArray arrayWithObjects:@"White", @"Brown", @"Black", @"Red", nil];
self.meatDataSource = [NSArray arrayWithObjects:@"Sausages", @"Crabs", @"Lobsters", @"Shrimps", nil];
}
配列は問題ではないと思いますが、ピッカーの 2 つのコンポーネントを同時にスピンすると、通常、アプリは EXC_BAD_ACCESS (Code=1...) でクラッシュします。
ここに私のUIPickerViewがあります:
ViewController.m
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (component == 0) {
// Left picker
return [leftPickerDataSource count];
//[foodPicker selectRow:0 inComponent:1 animated:YES];
}
else {
// Right picker
NSInteger sRow = [foodPicker selectedRowInComponent:0];
if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Vegetables"])
return [vegetablesDataSource count];
else if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Eggs"])
return [eggsDataSource count];
else if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Pasta"])
return [pastaDataSource count];
else if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Rice"])
return [riceDataSource count];
else if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Meat"])
return [meatDataSource count];
}
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component == 0) {
// Left picker
return [leftPickerDataSource objectAtIndex:row];
}
else {
// Right picker
NSInteger sRow = [foodPicker selectedRowInComponent:0];
if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Vegetables"])
return [vegetablesDataSource objectAtIndex:row];
else if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Eggs"])
return [eggsDataSource objectAtIndex:row];
else if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Pasta"])
return [pastaDataSource objectAtIndex:row];
else if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Rice"])
return [riceDataSource objectAtIndex:row];
else if ([[leftPickerDataSource objectAtIndex:sRow] isEqual:@"Meat"])
return [meatDataSource objectAtIndex:row];
}
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if (component == 0)
[foodPicker reloadComponent:1];
}
こちらも不審物は見当たりません。理由はわかりませんが、ホイールを回すとアプリがクラッシュします。SOで答えを探しましたが、何も役に立ちません:/
何が問題なのか分かりますか?