NSDatePicker绑定

时间:2014-04-15 16:29:39

标签: objective-c macos cocoa cocoa-bindings

为什么属性绑定到NSDatePicker的值并不总是反映出控件显示的内容?至少有两种情况,我的绑定属性与日期选择器显示的值不同:

  1. 初始值。日期选择器显示它的初始日期(在IB中设置)但绑定属性返回nil(如果用户不与选择器交互)。
  2. 最小值更改选择器中的日期,但绑定属性仍返回旧值(用户在设置最小值之前设置的值)。
  3. 如果不支持这种基本行为,那么对目标/操作使用绑定的原因是什么?我是Cocoa绑定的新手,所以也许我错过了一些东西。


    更新

    Attached sample project to see the problem.

2 个答案:

答案 0 :(得分:4)

  

为什么绑定到NSDatePicker的属性值并不总是反映出控件显示的内容?

模型 - 视图 - 控制器模式中,您的NSDatePicker是视图,ViewController是控制器,NSDate属性是模型。

通过控制器将视图绑定到模型。不是相反。

通过控制器将视图绑定到模型时,视图将开始反映模型。如果您与视图进行交互(例如,更改日期),则更改将应用​​于模型。

  

初始值。日期选择器显示它的初始日期(在IB中设置)但绑定属性返回nil(如果用户不与选择器交互)。

NSDatePicker显示默认值,因为模型未提供NSDate对象。 NSDatePicker NOT 应该在没有用户互动的情况下更改模型。

  

最小值在选择器中更改日期,但绑定属性仍返回旧值(用户在设置最小值之前设置的值)。

NSDatePicker只显示可接受值范围内的默认值,因为模型未提供NSDate对象。

  

如果不支持这种基本行为,那么对目标/行动使用绑定的原因是什么?

目标/行动只是绑定自动执行的一部分。如果没有绑定,您将在控制器(目标)中创建一个操作方法来处理用户交互(例如,用户更改日期)。在action方法中,您将更改模型对象。此外,在加载视图时,您可以将视图同步到模型中的视图。绑定消除了很多这种代码。

答案 1 :(得分:0)

NSDatePicker无法显示空日期。如果未设置dateValue或将值绑定为nil,则控件仍会显示日期值;它喜欢12/02/1982。

无法显示空白日期,因此表明零结合是刺激性的。

以下NSDatePicker子类可以显示空日期并表示nil绑定。

https://github.com/ThesaurusSoftware/TFDatePicker

运行TFDatePickerTest目标以查看其执行情况。