Cocoa绑定:自定义setter方法?

时间:2009-06-09 00:51:51

标签: cocoa cocoa-bindings key-value-observing

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

但是,每当我在对象本身中设置新值时,就像在“connect”方法中将“connect”键的值更改为2(look)(即propertiesDict = newDict)一样,更改不是似乎被观察者认为是必然的。我查看了observeValueForKeyPath:ofObject:change:context:中的NSKeyValueObservingProtocol。但是,我不知道如何处理context参数。

我希望这是有道理的......但如果有人有任何想法,我很乐意听到它们。

2 个答案:

答案 0 :(得分:2)

您的问题并不完全清楚,但如果我理解正确,问题可能是因为您需要在更改嵌入对象中的值之前和之后发送手动KVO通知。例如,[self willChangeValueForKey:@"connected"];[self didChangeValueForKey:@"connected"];

答案 1 :(得分:0)

以KVO兼容的方式更新属性/属性有三种方法:

  1. 使用属性设置器(在@property声明中指定或由@synthesize生成)
  2. 以任何方式更改属性值之前和之后调用-willChangeValueForKey:-didChangeValueForKey:
  3. 致电-setValueForKey: