可以用KVO深入观察变量集合吗?

时间:2014-12-29 23:59:56

标签: ios objective-c key-value-observing

我知道如何使用K-V-O来处理简单的属性。我的模型看起来像

@interface WateringScript : NSObject
@property (strong, nonatomic) NSMutableArray* spans; // holds WateringSpans
...
@end

@interface WateringSpan : NSObject
@property (strong, nonatomic) WateringAnchor* begin;
@property (strong, nonatomic) WateringAnchor* end;
...
@end

@interface WateringAnchor : NSObject
@property (assign, nonatomic) NSTimeInterval offset;
...
@end

基本上是一个包含一系列跨距的顶级对象,跨度被定义为结束并开始锚定对象,其中包含偏移量。

我有一个想要绘制所有偏移量的自定义视图。有没有一种简单的方法来观察所有偏移?这样当他们改变,或跨越或增加或删除时,我可以得到通知并作出相应的反应?

或者我是否必须观察集合,然后在初始/添加/删除更改时观察和取消观察集合元素?如果必须的话,我想我可以编写代码,真正的问题是KVO Juju让它更容易吗?

1 个答案:

答案 0 :(得分:1)

你无法通过数组观察键值。您必须观察to-many属性(spans)以更改其内容并单独观察元素。

一旦处理了元素的添加和删除,以便开始和停止观察它们的属性,您可以通过在开始观察to-many属性本身时指定NSKeyValueObservingOptionInitial来利用它进行初始设置。你基本上会被告知最初的元素已被添加"。

要实际处理添加和删除的元素,您可以使用-[NSArray addObserver:toObjectsAtIndexes:forKeyPath:options:context:]-removeObserver:fromObjectsAtIndexes:forKeyPath:开始和停止观察其属性 en masse

最终没有太多代码。