问题标签 [cocoa-bindings]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
177 浏览

cocoa - 是否可以有一个结合了多个关键路径的绑定?

假设我有一个具有数量值的对象。

另外,我有一个数组控制器,其中包含这些对象的数组。

此外,我有一个表,它具有总列的百分比(即给定行的数量占所有行数量总和的百分比),需要通过绑定填充适当的值。

然后看起来这样做的想法是将此列绑定到 arrayController.arrangedObjects.@sum.quantity 除以 arrayController.arrangedObjects.quantity。

是否有可能做到这一点?

如果没有,您能否提出实现同样目的的替代方法?

0 投票
1 回答
931 浏览

objective-c - 涉及绑定时如何覆盖 NSError 表示?

我在 Cocoa Bindings 中一直遇到的一件事是错误呈现,例如,当用户在附加了格式化程序的文本字段中键入错误值时。通常我会覆盖willPresentError:响应程序链中的某个位置,但我的问题是 Bindings 系统创建的 NSError 对象没有包含足够的信息来告诉我失败的原因,或者它是否是我有兴趣自定义的错误。当验证问题发生时,我可以完全从方程式中删除绑定并创建自己的错误,但我觉得我会以这种方式扔掉一些有用的东西。

我已经能够通过实现 NSControl 委托方法并将失败的控件存储在我的视图控制器中的实例变量中来解决这个问题。如果到时候它不是零willPresentError:,我知道什么无法验证。

这在第一响应者更改时有效,但在我调用commitEditing视图控制器时无效,所以它对我来说只是部分有用。

我能看到的唯一其他选择是将 NSFormatter 排除在外,并validateValue:forKey:error:在我的 Core Data 托管对象中使用来处理验证。这对我来说没有使用格式化程序那么有意义,但至少我可以完全控制 NSError 对象。

我觉得我必须遗漏一些东西才能与错误处理产生这种脱节。有什么建议么?

0 投票
3 回答
316 浏览

cocoa - 添加复合属性以绑定到现有类的最佳方法是什么

假设我有一个具有高度和宽度属性的 Size 类(实际上该类比这更复杂,但 Size 是一个很好的例子)。

我想在我的 UI 中将其显示为 $width x $height。

显而易见的方法是绑定到一个依赖于宽度和高度的尺寸属性。

我的问题是添加这个新属性的最佳位置在哪里?

我可以将它添加到模态中的 Size 类本身,但是如果另一个控制器想要显示不同的字符串,我会卡住创建另一个属性。我也有点不愿意这样做,因为在我的情况下, Size 类位于一个框架中,该框架将在几个不同的地方使用(尽管可能全部来自我可以控制的代码)。

我可以将它添加到包含视图/控制器的项目内的 Size 类的类别中,因此它仅在我知道将使用它的地方可用,但在不同的地方我已经看到有关类别倾向于被过度使用的建议,并且不得不怀疑这是否是其中一种情况。

在单个 Size 实例的情况下,我可以在包含它的控制器类中创建属性,但是当您有一个 Sizes 数组时,这变得更加困难。

我可以绑定到整个大小对象并使用转换器将它们转换为字符串,但是绑定到大小数组会导致您必须将数组的每个元素转换为转换器中的新数组,这似乎有点丑陋。

0 投票
3 回答
3697 浏览

cocoa - 如何将按钮的启用绑定绑定到 NSArrayController 是否有选择?

我想将 NSButton 的启用状态绑定到 NSArrayController 是否有任何选定的项目。

我该怎么做呢?

0 投票
2 回答
886 浏览

cocoa - 根据 NSTextFieldCell 的编辑值更新绑定字典

我正在将一些古老的代码(10.2 时代)从基于 NSCoding/plist 的归档移植到使用 Core Data。我有一个带有自定义 NSTextFieldCell 的 NSOutlineView。大纲视图绑定到 NSTreeController 以提供数据。

绑定模型如下所示:

NSTreeController: 托管对象上下文 -> Controller.managedObjectContext

NSOutlineView 的 NSTableColumn 值 -> Tree Controller:arrangedObjects:itemDictionary

NSOutlineView 有一个自定义的 NSTextFieldCell 子类,它在文本字段旁边添加一个图像,所以我将 NSManagedObject 的值作为一个名为 itemDictionary 的 NSMutableDictionary 传递给它,这样我就可以拉取并设置标题和 isChecked 键值。

我遇到的问题是更新文本字段的值并将更改后的值传递回我的托管对象实例。用户双击标题值并对其进行编辑后,它被传递给-(id)objectValue,但我不确定下一步是将更新传播到我的 NSManagedObject 实例。到目前为止,我在 NSTextFieldCell 子类中读取和设置值的代码如下:

0 投票
2 回答
1016 浏览

cocoa - Cocoa 绑定:自定义设置方法?

我正在使用 Cocoa 绑定来管理对象表。我了解绑定是如何工作的,但我遇到了一个小问题。管理对象表会很好而且很花哨,除了这些对象必须管理实际的蓝牙硬件。我正在开发一个框架,该框架提供一个表示与该硬件的连接的类,并制作了另一个“管理器”类,使其符合键值。换句话说,这个管理器类必须能够连接并修改其属性字典中的“连接”状态,成为该硬件的代表并修改属性,并使用所做的更改更新硬件。

但是,每当我在对象本身中设置新值时,例如在将“连接”键的值更改为 2(查看)的“连接”方法中,(即propertiesDict = newDict),观察者似乎并没有注意到这种变化它是必然的。我看过里面observeValueForKeyPath:ofObject:change:context:NSKeyValueObservingProtocol。但是,我不知道如何处理上下文参数。

我希望这是有道理的……但如果有人有任何想法,我很想听听。

0 投票
2 回答
10254 浏览

objective-c - 如何通过 NSArrayController 获得模型更改的通知?

我有一个NSView绑定arrangedObjectsNSArrayController. 当数组插入或删除项目时,会通知视图。如果存储在数组中的模型的属性发生更改,如何通知它?

我是否需要将我的视图作为观察者添加到添加到数组中的每个项目的每个(相关)属性?

当一个项目被添加到数组中或从数组中删除时,我observeValueForKeyPath:ofObject:change:context:会在我的NSView子类中收到通知。我没有收到关于存储在数组中的模型的更改的通知,但是每次我收到插入通知时,我都可以将视图作为观察者添加到新项目的属性中。这是最好的方法吗?

我覆盖addObserver了模型类,以便我可以看到发生了什么,并注意到NSTableView绑定到的列arrangedObjects将自己作为观察者添加到适当的属性。这可以自动发生还是我手动设置观察?

0 投票
4 回答
16363 浏览

objective-c - 我应该什么时候移除观察者?在移除观察者之前释放对象的错误

我正在尝试在我的一门课程中使用键值观察。我在 init 方法中注册了观察者并在 dealloc 中删除/取消注册它们,但是根据我的调试打印,我得到了以下错误,这似乎发生在我的 dealloc 方法被调用之前。

TekkPoint 类的实例 0x583870 正在被释放,而键值观察者仍向其注册。观察信息被泄露,甚至可能被错误地附加到其他对象上。在 NSKVODeallocateBreak 上设置断点以在调试器中停止。这是当前的观察信息:(上下文:0x0,属性:0x536400> 上下文:0x0,属性:0x55aba0>)

有没有一种特殊的方式我应该删除观察者?或者也许是我应该删除它们的特定位置?

根据这个问题,我做对了,但为什么会收到此错误消息?

这是我的dealloc例程:

需要注意的一点是,我的实现可能很奇怪,我正在从被观察者中添加和删除观察者,这会导致我的问题吗?

0 投票
4 回答
702 浏览

cocoa - NSTableColumn 绑定到一个 BOOL 值

我将 NSTableView 绑定到 NSArrayController。在我的模型中,我有一个 BOOL 字段。我正在尝试将该值绑定到列。它正确显示(值为 YES 时为 1,值为 NO 时为 0),但它是只读的。=(当我试图编辑一个值时我无法提交它——当我按下回车键时没有任何反应,setter 永远不会被调用。列是可编辑的。

我可以成功地将它与 IB 绑定——我只是像往常一样绑定它并且一切正常。但我不能以编程方式做同样的事情=(

这就是列的创建和添加方式:

我只有 BOOL 值有问题,如果我将同一列绑定到其他字段(只是更改 keyPath)一切正常。

0 投票
1 回答
731 浏览

objective-c - 将 NSArrayController 与嵌套的 NSMutableArrays 一起使用(Cocoa 绑定问题)

我有一个带有以下对象的 NSArrayController:

我有一个带有 NSTableView 的简单 GUI 来显示前两个键,我想要第二个 NSTableView 来显示第一个 TableView 的选定项的 MutableArray(任务)的内容。

我怎样才能做到这一点?