我知道如何使用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让它更容易吗?
答案 0 :(得分:1)
你无法通过数组观察键值。您必须观察to-many属性(spans
)以更改其内容并单独观察元素。
一旦处理了元素的添加和删除,以便开始和停止观察它们的属性,您可以通过在开始观察to-many属性本身时指定NSKeyValueObservingOptionInitial
来利用它进行初始设置。你基本上会被告知最初的元素已被添加"。
要实际处理添加和删除的元素,您可以使用-[NSArray addObserver:toObjectsAtIndexes:forKeyPath:options:context:]
和-removeObserver:fromObjectsAtIndexes:forKeyPath:
开始和停止观察其属性 en masse 。
最终没有太多代码。