UIDatePicker崩溃

时间:2016-05-07 20:33:52

标签: swift uipickerview uidatepicker

在我的UIViewController我有2 UITextFields A和B. A以编程方式将inputView设置为UIDatePicker。 B将其inputView以编程方式设置为UIPickerView,我已定义dataSourcedelegate

当A的选择器中的值发生变化时,我附加了一个选择器,用于更新A中的文本。 当B的选择器中的值发生变化时,我会将NSNotification类的dataSource, delegate发送到UIViewController。 TextField B基本上允许用户将n 年数添加到A中的日期。请注意,此时B的选择器仍然可见。

到目前为止一切顺利。

现在,当我在NSNotification收到UIViewController时,我的notificationReceived选择器方法从B获取输入,进行一些计算,并更新选择器和A中的文本。代码的相关部分如下所示:

class MyViewController: UIViewController {

    @IBOutlet weak var textFieldA: UITextField!
    @IBOutlet weak var textFieldB: UITextField!
    let datePickerA = UIDatePicker()
    let pickerB     = UIPickerView()

    override func viewDidLoad() {
        super.viewDidLoad()

        // init A
        datePickerA.datePickerMode = UIDatePickerMode.DateAndTime
        picker.addTarget(self, action: #selector(datePickerAChanged(_:)), forControlEvents: UIControlEvents.ValueChanged)
        textFieldA.inputView = datePickerA

        // init B
        pickerB.dataSource   = bDataSource //bDataSource is the datasource and delegate class instance
        pickerB.delegate     = bDataSource
        textFieldB.inputView = pickerB

    }

    func notificationReceived(notification: NSNotification) {
        switch notification.name {
        case foo:
            // do calculations and get the updated date
            let nsdate = calculateNewDate()
            self.datePickerA.setDate(nsdate, animated: false)
            self.textFieldA.text = newDateString()
        default:
            break;
        }
    }

}

当我第一次突出显示B,选择一个值,然后突出显示A时,这种安排工作正常。但是当我首先突出显示A,然后突出显示B并在B中选择一个值,然后再次点击A,然后我的应用程序崩溃有错误:

  

我的应用[] *断言失败 - [UIPickerTableView   _createPreparedCellForGlobalRow:withIndexPath:willDisplay:],/ BuildRoot / Library / People / com.apple.xbs / Source / UIKit_Sim / UIKit-3512.60.7 / UITableView.m:10594
  我的应用程序[] *因未捕获的异常而终止应用程序   'NSInternalInconsistencyException',原因:'UITableView dataSource是   没有设置'

如果我评论self.datePickerA.setDate(nsdate, animated: false),那么它不会崩溃。我检查nsdate,以便它不是零或无效,所以这不是问题。

这里没有任何变量超出范围,我最终在试图理解为什么会崩溃。救命!

更新:我已在此处上传了项目文件:https://github.com/urbanmachinist/DatePickerCrash/tree/master 自述文件显示了重现错误的步骤。

0 个答案:

没有答案