iOS UIDatePicker始终返回今天的日期

时间:2015-07-15 14:58:50

标签: ios swift date uidatepicker

Stack Overflow上有类似的问题,但问题与我的不同,所以我随意打开这个。

我有iOS视图控制器,在故事板中定义了UIDatePicker。 我已在视图控制器代码中定义(连接)IBOutlet,如下所示:

@IBOutlet weak var endTimeDatePicker: UIDatePicker!

有一次我设置了这样的初始日期:

endTimeDatePicker.date = state!.endTime; 

或者像这样:

endTimeDatePicker.setDate(state!.endTime, animated: true);

并显示正确的日期,表明日期选择器已正确连接。

但是,如果我选择另一个日期并尝试使用endTimeDatePicker.date获取所选日期,那么无论我选择什么,它总是返回相同的 - 今天的日期。

日期选择器的故事板属性包括: 模式 - 日期和时间 间隔 - 1分钟 日期 - 当前日期(但它与自定义相同,每次仅返回定义的自定义日期)

有什么我不想做的事吗?

我不确定两个不同的datePickers(就像潜在的重复Stack Overflow问题一样)

编辑:看起来只有当日期选择器从代码设置初始值时才会发生。

编辑:设置日期选择器的代码:

 private func reloadData (state : State?)
    {
        if (state != nil)
        {
            endTimeDatePicker.setDate(state!.endTime, animated: true);

            backgroundImage.image = UIImage(named: state!.type.imageName)!;
        }
        else
        {
            let endDate = NSDate(timeIntervalSinceNow: 1800);
            endTimeDatePicker.setDate(endDate, animated: true);
            backgroundImage.image = UIImage(named: StateType.Active.imageName);
        }
    }

尝试读取所选日期的代码:

 @IBAction func doneTapped(sender: AnyObject) {

        let row: Int = self.stateTypePicker.selectedRowInComponent(0);


        state = State (id: -1, type: stateTypes[row], startTime: NSDate(), endTime: self.endTimeDatePicker.date);

        service.addState(state!) {
            (responseDict) in
        }
    }

在http请求的回调中调用func reloadData。可能是线程锁定问题?

1 个答案:

答案 0 :(得分:1)

您的问题与reloadData的回调方法NSURLSession有关。在这里,您正在后台线程中更新UIDatePicker,但所有UI更新都必须在主线程上完成。

当您阅读date的{​​{1}}属性时,这就是您今天看到日期的原因。