【问题标题】:Xcode UIPickerView "NSInvalidArgumentExpression"?Xcode UIPickerView“NSInvalidArgumentExpression”?
【发布时间】: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


【解决方案1】:

看起来 categoriesData 没有正确分配值。尝试更改下面的这一行并检查:-

self.categoriesData = _dataArray;

【讨论】:

  • 没有骰子。不过还是谢谢。
  • 您是否尝试在您的方法中返回一些其他值??
  • 是的,我尝试了“return 5”和“return @"Hi""...也没有工作。可能是我对pickerView的理解有些欠缺,所以我会继续挑剔。感谢您的帮助。
  • 那么问题出在你的方法上。请检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多