按钮操作的选择器视图崩溃
Posted
技术标签:
【中文标题】按钮操作的选择器视图崩溃【英文标题】:Picker View for button action getting crashed 【发布时间】:2011-12-26 12:41:18 【问题描述】:I have a picker view,when the row component of a picker view is selected,it navigates to a view,there I have a button changeGroup.On clicking the button the picker view must appear,but it is not happening!崩溃了
这是我的代码:
- (void)viewDidLoad
groupArr = [[[NSMutableArray alloc]initWithObjects:@"Family",@"Friends",@"Office",@"Acquaintances", nil]autorelease];
agrpPicker.hidden = YES;
#pragma mark-
#pragma mark PickerView Datasource
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
int number = 0;
if (agrpPicker.hidden == NO)
number = 1;
return number;
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
int count = 0;
if (agrpPicker.hidden == NO)
count = [self.groupArr count];
return count;
#pragma mark-
#pragma mark PickerView Delegate
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
NSString *str = [[[NSString alloc]init]autorelease];
if (agrpPicker.hidden == NO)
str = [self.groupArr objectAtIndex:row];
return str;
这是显示选择器视图的按钮的操作:
-(IBAction)groupButtonSelceted:(id)sender
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.6];
CGAffineTransform transfrom = CGAffineTransformMakeTranslation(0, 200);
agrpPicker.transform = transfrom;
[UIView commitAnimations];
agrpPicker.hidden = [agrpPicker isHidden] ? NO : YES;
[self.view addSubview:agrpPicker];
将该选择器视图连接到 IB 中的选择器视图。
这是坠毁地点的屏幕截图
在控制台中,消息如下图所示:
哪位专家能指出我哪里出错了......
请帮我提出宝贵的建议,在此先感谢:)
对不起各位,我发现是什么错误,我没有在自动释放后保留数组,而不是:
groupArr = [[[NSMutableArray alloc]initWithObjects:@"Family",@"Friends",@"Office",@"Acquaintances", nil]autorelease];
是self.groupArr = ....;
感谢所有查看过的人和为解决问题做出贡献的人:)
【问题讨论】:
你能把崩溃日志也放在这里吗? @rishi 是的 Rishi 先生,我已经放了一个快照以便清楚理解,请参阅编辑后的答案,提前谢谢:) 根据屏幕截图,这似乎是内存问题,引用了未分配的对象。控制台日志中是否也有任何内容? 控制台 Mr.Rishi 除了 (gdb) 没有任何内容 您能否分享您在应用程序中拥有的选择器视图的代码,代码本身有问题。 【参考方案1】:由于自动释放,您的 groupArr 数组正在失去其内容。所以改变这个
groupArr = [[NSMutableArray alloc]initWithObjects:@"Family",@"Friends",@"Office",@"Acquaintances", nil];
[groupArr 保留];
【讨论】:
感谢您的回答,但我还是使用 self.groupArr = [[NSMutableArray alloc]initWithObjects:@"Family",@"Friends",@"Office",@"Acquaintances" 修复了它, 无]; 重新加载选择器视图。使用此代码 [agrpPicker reloadAllComponents];按下按钮时【参考方案2】:在 .h 文件中添加 UIPickerViewDelegate。
在 .m 文件中,添加 PickerView 委托和数据源方法。 数据来源:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
代表:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
有关详细信息,请参阅 Apple 的UIPickerView class。
【讨论】:
请查看已编辑的问题(帖子),请提供解决方案,谢谢您的回答:)以上是关于按钮操作的选择器视图崩溃的主要内容,如果未能解决你的问题,请参考以下文章
为啥这段代码在运行时会崩溃?它只是选项卡式视图中 SwiftUI 中的选择器
Android实用视图动画及工具系列之九:漂亮的图片选择器,高性能防崩溃图片选择工具
从另一个类触摸时的 Swift 按钮操作选择器:无法识别的选择器发送到实例
选择表格单元格以显示 iOS7 上的新视图崩溃,“无法识别的选择器发送到实例”