我正在尝试将字符串的NSMutableArray按字母顺序排序,并在UIPickerView中显示已排序的列表。我正在使用另一个NSArray来创建一个排序列表。
我正在使用PickerView委托方法并将它们包含在我的.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);
}
对此的任何帮助将不胜感激。
答案 0 :(得分:1)
我在这个答案中假设你没有使用ARC,因为你有一个保留的属性。您可以使用以下语句为实例变量分配一个自动释放的值:
sortedPickerArray = [pickerArray sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
稍后访问sortedPickerArray
时,它已被解除分配。因此,再次假设您没有使用ARC,请在其中添加retain
。并删除该行
sortedPickerArray = [[NSArray alloc] init];
因为你现在正在泄漏这个数组。