0

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

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

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[ClientSetupViewController pickerView:numberOfRowsInComponent:]: unrecognized selector sent to instance 0x8a89a10”

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

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

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

3 回答 3

2

看起来很期待

-pickerView:numberOfRowsInComponent

代替

-pvMan:numberOfRowsInComponent

除非你在其他地方定义了那个并且调用-pvMan:numberOfRowsInComponent:

于 2012-12-31T20:28:24.793 回答
1

你得到那个例外是因为你没有实现pickerView:numberOfRowsInComponent:. 您已实施pvMan:numberOfRowsInComponent:. UIPickerView dataSource对您来说不幸的是,工具是否无关紧要pvMan:numberOfRowsInComponent:。它需要是:

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

您不需要区分不同的选择器,因为您只有一个选择UIPickerViewdataSource。此外,UIDatePickers子类UIControl. UIDatePicker确实有一个UIPickerViewprivate ivar,但由于你不是(也永远不会是)它dataSource,这与你无关。

于 2012-12-31T20:35:51.607 回答
0

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

2)因此它不响应pickerView:numberOfRowsInComponentdatePickerMode您可以通过 @Property使用适当的格式在其上设置 NSDate 对象来设置其上的行。

3) 对于其他 UIPickers,您可以通过 UIPickerViewDataSource 协议设置它们的行数,并且您必须支持:

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

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

于 2012-12-31T20:36:20.227 回答