我有一个NSView
绑定到的子类arrangedObjects
of an NSArrayController
。当数组插入或删除项目时,视图会收到通知。如果数组中存储的模型的属性发生更改,如何通知它?
我是否需要将我的视图作为观察者添加到添加到数组中的每个项目的每个(相关)属性?
当一个项目被添加到数组或从数组中删除时,我会通过以下方式收到通知observeValueForKeyPath:ofObject:change:context:
in my NSView
子类。我没有收到有关数组中存储的模型更改的通知,但每次收到插入通知时,我都可以将视图作为观察者添加到新项目的属性中。这是最好的方法吗?
我推翻了addObserver
对于模型类,以便我可以看到发生了什么并注意到NSTableView
列绑定到arrangedObjects
将自己作为观察者添加到适当的属性中。这可以自动发生还是我可以手动设置观察?
非常感谢 dreamlax,但我认为我在解释我的问题方面做得不够好。我的模型类是可观察的并产生了正确的通知,但如果不直接观察数组中的每个项目,我无法弄清楚如何观察它们。
我认为关键路径的文档可以改进,因为我找不到任何可以解释我需要进行的非常简单的更改的内容。有一些关于数组魔术键路径的好信息,但没有简单的“这些是常见的东西”文档。
反正。之前在我的NSView
子类我有以下内容:
- (void) bind:(NSString *)binding toObject:(id)observable withKeyPath:(NSString *)keyPath options:(NSDictionary *)options
{
if ([binding isEqualToString:@"observedObjects"]) {
[observable addObserver:self forKeyPath:@"arrangedObjects" options:0 context:nil];
} else {
[super bind:binding toObject:observable withKeyPath:keyPath options:options];
}
}
获取模型更改的通知NSArrayController
's arrangedObjects
我需要补充的是观察arrangedObjects.name
(为了name
我的模型的财产)。于是上面的代码就变成了:
- (void) bind:(NSString *)binding toObject:(id)observable withKeyPath:(NSString *)keyPath options:(NSDictionary *)options
{
if ([binding isEqualToString:@"observedObjects"]) {
[observable addObserver:self forKeyPath:@"arrangedObjects" options:0 context:nil];
[observable addObserver:self forKeyPath:@"arrangedObjects.name" options:0 context:nil];
} else {
[super bind:binding toObject:observable withKeyPath:keyPath options:options];
}
}
就是这样!现在如果有任何对象arrangedObjects
得到它的name
更改后我会收到通知。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)