【发布时间】:2014-12-29 00:53:03
【问题描述】:
我正在尝试在 FlipsideViewController 中实现 UIPickerView,它只是一个设置选项卡。
这是.h文件中的相关代码:
@class FlipsideViewController;
@protocol FlipsideViewControllerDelegate<UIPickerViewDataSource, UIPickerViewDelegate>
- (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
@end
@property (strong, nonatomic) IBOutlet UIPickerView *Categories;
@property (strong, nonatomic) NSArray *categoriesData;
@property (strong, nonatomic) NSMutableArray* dataArray;
- (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
- (NSInteger)Categories:(UIPickerView *)Categories numberOfRowsInComponent:(NSInteger)component;
- (NSString*)Categories:(UIPickerView *)Categories titleForRow:(NSInteger)row forComponent:(NSInteger)component;
这是.m文件中的相关代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_Categories = [[UIPickerView alloc] initWithFrame:CGRectMake((pickerWidth*4/3)/2-pickerWidth/2, 50.0f, pickerWidth, 200.0f)];
_Categories.showsSelectionIndicator = true;
[_Categories selectRow:2 inComponent:0 animated:YES];
[self.view addSubview: _Categories];
_dataArray = [[NSMutableArray alloc] init];
[_dataArray addObject:@"One"];
[_dataArray addObject:@"Two"];
[_dataArray addObject:@"Three"];
[_dataArray addObject:@"Four"];
[_dataArray addObject:@"Five"];
_categoriesData = _dataArray;
_Categories.dataSource = (id)self;
_Categories.delegate = (id)self;
}
- (int)numberOfComponentsInPickerView:(UIPickerView *)Categories
{
return 1;
}
// The number of rows of data
- (NSInteger)Categories:(UIPickerView *)Categories numberOfRowsInComponent:(NSInteger)component
{
return _categoriesData.count;
}
// The data to return for the row and component (column) that's being passed in
- (NSString*)Categories:(UIPickerView *)Categories titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [_categoriesData objectAtIndex:row];
}
抱歉,阅读内容有点过多。关键是在最后一部分,当- (NSInteger)Categories:(UIPickerView *)Categories numberOfRowsInComponent:(NSInteger)component 运行时,它返回一个“NSInvalidArgumentException”。我尝试在每种方法中重新初始化 dataArray 和 categoriesData,但无济于事。我不确定我应该怎么做......请帮忙。谢谢!
编辑:
发现错误。它在方法调用中......而不是指定我试图访问哪个 UIPickerView,而应该只放入一个通用的“UIPickerView”。所以,它应该是这样的:
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{}
不是这样的:
- (NSString*)pickerView:(UIPickerView *)Categories titleForRow:(NSInteger)row forComponent:(NSInteger)component
- (NSInteger)pickerView:(UIPickerView *)Categories numberOfRowsInComponent:(NSInteger)component{}
希望这可以帮助任何发现类似问题的人。
【问题讨论】:
-
“NSInvalidArgumentException”是完整的错误信息吗?
-
@Zaph 否。完整消息是:“由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'-[FlipsideViewController pickerView:numberOfRowsInComponent:]: unrecognized selector sent to instance 0x7fd374cac3b0' ”。这就是我知道它在 numberOfRowsInComponent 方法中的方式。
标签: objective-c xcode xcode6 uipickerview