UIPickerView:排序和显示值数组会导致移动时崩溃?
Posted
技术标签:
【中文标题】UIPickerView:排序和显示值数组会导致移动时崩溃?【英文标题】:UIPickerView: Sorting & displaying an array of values causes crash when moved? 【发布时间】:2012-08-30 04:00:43 【问题描述】:我正在尝试将 NSMutableArray 的字符串按字母顺序排序,并在 UIPickerView 中显示排序列表。我正在使用另一个 NSArray 来创建排序列表。
我正在使用 PickerView 委托方法并将它们包含在我的 .h 设置中:并将数据源和委托出口连接到 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);
对此的任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:我在此答案中假设您没有使用 ARC,因为您有保留的财产。您可以使用以下语句为您的实例变量分配一个自动释放的值:
sortedPickerArray = [pickerArray sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
当您稍后访问sortedPickerArray
时,它已经被释放。因此,再次假设您没有使用 ARC,请在其中添加 retain
。并删除该行
sortedPickerArray = [[NSArray alloc] init];
因为你现在正在泄漏这个数组。
【讨论】:
太棒了!我非常感谢你 - 这成功了!你是对的,我没有使用ARC!我错过了自动发布的价值,这绝对是问题所在。哎呀,当我在 Xcode 和 *** 之间切换时,我忘了删除那一行(sortedPickerArray alloc)——我的错 :-) 酷!很高兴我帮了忙!请接受答案并投票,这将非常感谢!以上是关于UIPickerView:排序和显示值数组会导致移动时崩溃?的主要内容,如果未能解决你的问题,请参考以下文章