【问题标题】:If I have two (2) UIDatePickers and one (1) UIPickerView, do I need to use tags?如果我有两 (2) 个 UIDatePickers 和一 (1) 个 UIPickerView,我需要使用标签吗?
【发布时间】:2012-12-15 20:34:57
【问题描述】:

我有一个 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
}

【问题讨论】:

    标签: objective-c uipickerview xcode4.5


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      你得到这个异常是因为你没有实现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,这与你无关。

      【讨论】:

        【解决方案3】:

        看起来是在期待

        -pickerView:numberOfRowsInComponent

        而不是

        -pvMan:numberOfRowsInComponent

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

        【讨论】:

        • 天哪,我把它弄脏了!终于把它理顺了,它就像一个冠军一样工作......非常感谢......我已经为此奋斗了 6 个小时1
        猜你喜欢
        • 1970-01-01
        • 2022-11-02
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 2015-03-24
        • 1970-01-01
        相关资源
        最近更新 更多