UIPickerView,无法从数组中获取数据
Posted
技术标签:
【中文标题】UIPickerView,无法从数组中获取数据【英文标题】:UIPickerView, cannot get data from array 【发布时间】:2009-12-12 23:29:19 【问题描述】:我正在尝试学习如何使用 UIPickerView,但我不知道为什么我的警报视图总是打印数组中的第一个元素(选择器),而不是其他任何元素。我为选择器定义了一个按钮按下:
- (IBAction)buttonPressed
NSInteger row = [myPicker selectedRowInComponent:0];
NSString *s = [myPickerData objectAtIndex:row];
NSLog(@"%@", s);
NSString *title = [[NSString alloc] initWithFormat:@"You selected, %@", s];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
message:@"Message"
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles:nil];
[alert show];
[alert release];
[title release];
我的数组定义为:
- (void)viewDidLoad
[super viewDidLoad];
NSArray *array = [[NSArray alloc] initWithObjects:@"0", @"1", @"2", nil];
self.myPickerData = array;
[array release];
我在选择器更改时记录输出,并且值会相应地更改为 0、1、2。
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
NSLog(@"%@", [myPickerData objectAtIndex:row]);
但是警报视图永远不会起作用。所以我不确定我在这里做错了什么。
【问题讨论】:
【参考方案1】:我怀疑您的 nib 文件中缺少连接,特别是从 myPicker 出口到 UIPickerView 实例。如果是这种情况,myPicker
将为零,所以这条线
NSInteger row = [myPicker selectedRowInComponent:0];
总是将 row 设置为 0,这就解释了为什么总是显示数组中的第一项。
除了检查您的 nib 文件之外,您还可以通过在 buttonPressed 方法中设置断点并检查 myPicker 是否为 nil 来确认这一点。
您确实有一个从 UIPickerView 的委托/数据源出口到您的控制器类的连接,这就是您的委托方法被调用的原因。但是您需要在另一个方向上建立连接才能使您的按钮方法正常工作。
【讨论】:
以上是关于UIPickerView,无法从数组中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIPickerView 中的数据将单元格添加到数组?