如果我有两(2)个UIDatePickers和一个(1)UIPickerView,我是否需要使用标签?

时间:2012-12-31 20:18:34

标签: objective-c uipickerview xcode4.5

我有一个iPad应用程序,使用XCode 4.5,Storyboards,ARC和iOS 6构建。我有一个控制器,带有两个UIDatePickers和一个UIPickerView。由于UIDatePicker是从UIPickerView派生的,我是否需要使用标签来引用 numberOfRowsInComponent 中的UIPickerView?

我问的原因是因为我得到了一个干净的构建,但是在它遇到 numberOfRowsInComponent (设置断点;永远不会到达那里)之前出现运行时错误:

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:' - [ClientSetupViewController   pickerView:numberOfRowsInComponent:]:发送到的无法识别的选择器   实例0x8a89a10'

这是给我问题的代码(manArray.Count = 6);

-(NSInteger)pvMan:(UIPickerView *)pvMan numberOfRowsInComponent:(NSInteger)component  {

    return manArray.count;  //set number of rows
}

3 个答案:

答案 0 :(得分:2)

看起来好像在期待

-pickerView:numberOfRowsInComponent

而不是

-pvMan:numberOfRowsInComponent

除非您在其他地方定义并且调用-pvMan:numberOfRowsInComponent:

答案 1 :(得分:1)

您正在获得该异常,因为您没有实施pickerView:numberOfRowsInComponent:。您已实施pvMan:numberOfRowsInComponent:。不幸的是,UIPickerView dataSource实现pvMan:numberOfRowsInComponent:并不重要。它必须是:

-(NSInteger)pickerView:(UIPickerView *)pvMan numberOfRowsInComponent:(NSInteger)component  {
    return manArray.count;  //set number of rows
}

您不需要区分不同的选择器,因为您只有一个UIPickerView,而您是dataSource。此外,UIDatePickers子类UIControlUIDatePicker确实有UIPickerView私有ivar,但由于您不是(并且永远不会)dataSource,因此您无需担心。

答案 2 :(得分:0)

1)UIDatePicker不是UIPicker的子类,根据Apple Docs,“不从UIPickerView继承。”

2)因此它没有回应pickerView:numberOfRowsInComponent。您可以通过具有适当格式的@Property datePickerMode在其上设置NSDate对象来设置行。

3)对于OTHER UIPickers,你可以通过UIPickerViewDataSource协议设置它们的行数,你必须支持:

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component

并为其提供相关选择器的正确行数。如何将正确的行数与选择器相关联是通过了解当时哪个选择器正在询问。您将通过评估要求的*pickerView来做到这一点。