objective-c - NSDatePicker 绑定(bind)

标签 objective-c macos cocoa cocoa-bindings

为什么绑定(bind)到NSDatePicker的属性值并不总是反射(reflect)控件显示的内容?至少在两种情况下,我的绑定(bind)属性获得的值与日期选择器显示的值不同:

  1. 初始值。日期选择器显示其初始日期(在 IB 中设置),但绑定(bind)属性返回 nil(如果用户不与选择器交互)。
  2. 最小值会更改选择器中的日期,但绑定(bind)属性仍返回旧值(用户在设置最小值之前设置的值)。

如果目标/操作不支持这种基本行为,那么使用绑定(bind)的原因是什么?我是 Cocoa 绑定(bind)的新手,所以也许我遗漏了一些东西。

<小时/>

更新:

Attached sample project to see the problem.

最佳答案

Why property's value bound to NSDatePicker does not always reflect what control shows?

模型- View - Controller 模式中,您的NSDatePicker是 View ,您的ViewController是 Controller ,NSDate 属性是模型。

您可以通过 Controller 将 View 绑定(bind)到模型。反之则不然。

当您通过 Controller 将 View 绑定(bind)到模型时, View 将开始反射(reflect)模型。如果您与 View 交互(例如更改日期),更改将应用​​于模型。

Initial value. Date picker shows it's initial date (set in IB) but bound property returns nil (if user does not interact with picker).

NSDatePicker 显示任何默认值,因为模型不提供 NSDate 对象。 NSDatePicker 不应在没有用户交互的情况下更改模型。

Min value changes date in picker, but bound property still returns old value (the value user had set before min value was set).

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

What is the reason to use bindings over target/action if it does not support such fundamental behaviour?

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

关于objective-c - NSDatePicker 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089472/

相关文章:

macos - Mac OS X - 向终端添加边框

git - 当我想 pull 或推送 repo 时如何更改 Git 用户名?

objective-c - 如何在 OS X 上制作圆角 WKWebView?

objective-c - 使用 stringWithFormat 时发生 EXC_BAD_ACCESS 错误

iphone - 如何创建 NSPredicate 以查找具有前导数值的条目?

objective-c - 使用 OpenGL ES 模板时的错误信息

macos - 与 Xcode 一起安装 LLVM 库

objective-c - 带搜索字段的 Cocoa 绑定(bind)可变字典

cocoa - 使用 KVO 时出现异常

ios - 有没有办法检查字符串是否包含 Unicode 字母?