Swift - UIPickerView 使应用程序崩溃而没有错误

Posted

技术标签:

【中文标题】Swift - UIPickerView 使应用程序崩溃而没有错误【英文标题】:Swift - UIPickerView crashes app without error 【发布时间】:2015-07-09 12:06:09 【问题描述】:

我继承了一个自定义 UITableViewCell,并在其中安装了一个 UIPickerView。我已经连接了我的 IBOutlet,以及数据源和委托。但是,每当要显示单元格时,应用程序就会崩溃(控制台窗口中没有任何错误)。知道发生了什么吗?下面是自定义 UITableViewCell 的代码...

   import UIKit

   class OptionPickerTableViewCell: UITableViewCell, UIPickerViewDataSource, UIPickerViewDelegate 

  //  MARK: - Variables

  let height: CGFloat = 160
  var options: [String] = [String]()

  //  MARK: - IBOutlets

  @IBOutlet weak var pickerView: UIPickerView!

  //  MARK: Functions

  func setCell(options: [String]) 
    self.options = options

       

  //  MARK: - UIPickerViewDelegate

  func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! 
    return options[row]
  

  //  MARK: - UIPickerViewDataSource

     func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int                                      
    return 1
  

  func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    return options.count
  


更新:

收到的错误代码是:

Getting the errors: 2015-07-09 13:21:39.924 Gym Assist[12610:473411] -[NSObject numberOfComponentsInPickerView:]: unrecognized selector sent to instance 0x7fa62c828ad0 2015-07-09 13:21:39.931 Gym Assist[12610:473411] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSObject numberOfComponentsInPickerView:]: unrecognized selector sent to instance 0x7fa62c828ad0'

【问题讨论】:

如果您不知道如何获得错误消息或任何有关崩溃的实际反馈,除了猜测之外,我们无能为力。 添加日志消息func pickerView 以记录选项的大小:NSLog("in pickerView: options has %i members, member %i requested", options.count, row) 出现错误:2015-07-09 13:21:39.924 Gym Assist[12610:473411] -[NSObject numberOfComponentsInPickerView:]:无法识别的选择器发送到实例 0x7fa62c828ad0 2015-07-09 13:21 :39.931 Gym Assist[12610:473411] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSObject numberOfComponentsInPickerView:]:无法识别的选择器发送到实例 0x7fa62c828ad0” 该错误表明您已将委托和数据源连接到 tableView 控制器类,因此请将其删除并将其添加到您的自定义单元格类中,例如 pickerView.dataSource = self pickerView.delegate = self 将您的错误消息添加到问题本身。 【参考方案1】:

您的项目正在崩溃,因为您为 PickerView 分配了错误的委托和数据源。

所以删除它并将其添加到您自定义单元格类的awakeFromNib 方法中:

override func awakeFromNib() 
    super.awakeFromNib()

    pickerView.dataSource = self
    pickerView.delegate = self


【讨论】:

以上是关于Swift - UIPickerView 使应用程序崩溃而没有错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的第一个 iOS 应用程序 - UIPickerView 中的问号

Swift:点击 UITextField 时如何显示 UIPickerView

Swift Dictionary UIPickerView (key) 和 (value) Swift

使用 Swift 使用 Core Data 对象填充 UIPickerView

Swift 3 中的 UIPickerView 和子类数组

ios swift 2如何用json数据填充uipickerview [重复]