文字列の NSMutableArray をアルファベット順にソートし、ソートされたリストを UIPickerView に表示しようとしています。別の NSArray を使用してソート済みリストを作成しています。
私は PickerView Delegate Methods を使用しており、それらを .h セットアップに含めており、dataSource とデリゲート アウトレットを filesOwner に接続しています。私の .h ファイルでは、IBOutlet UIPickerView *pickerView; も作成しました。次のように合成プロパティを作成しました。
@property (nonatomic, retain) IBOutlet UIPickerView *pickerView;
問題のトラブルシューティングを試みて、まず次のようにして、ソートされていない NSMutableArray をソースにしました。
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [pickerArray objectAtIndex:row];
}
ソートされていない MutableArray には問題がなく、データ (ソートされていない) が PickerView に問題なく表示されますが、配列をソート済みの NSArray に変更すると、PickerView を移動しようとするとクラッシュします!? 両方の配列内の項目の NSLog は、同じ数の項目、同じデータ (明らかに異なって表示されます) を明らかにしますが、Xcode は EXC_BAD_ACCESS?? を報告します。これじゃ解らないよね??
ここに私のコードがあります: (注: sortedPickerArray は NSArray で、pickerArray は私の .h ファイルで宣言された NSMutableArray です)
- (void)viewDidLoad{
[super viewDidLoad];
sortedPickerArray = [[NSArray alloc] init];
pickerArray = [[NSMutableArray alloc] initWithObjects:
@"ObjectA",
@"ObjectB",
@"ObjectC",
@"ObjectD",
nil];
sortedPickerArray = [pickerArray sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
[pickerView selectRow:0 inComponent:0 animated:NO];
pickerView.showsSelectionIndicator = YES;}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView{
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component{
return [sortedPickerArray count];
}
-(NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [sortedPickerArray objectAtIndex:row];
}
-(void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSLog(@"Row %d was selected", row);
}
これに関するヘルプは大歓迎です。