我想监视 NSCountedSet 以查看其内容是否发生变化。设置 KVO 似乎可以编译但没有被触发。第一个问题:你能观察到一个集合吗?如果是这样,那么这条消息有什么问题吗?
[subViewA addObserver:subViewB forKeyPath:@"countedSet" options:0 context:NULL];
如果有帮助,我真的只是想监视集合中的(对象数)的 计数 。
编辑 - 这是观察者(subViewB):
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if ([keyPath isEqual:@"countedSet"]) {
NSLog(@"Set has changed");
}
}
Edit2 - 将 addObserver 消息从 subview 移动到 View Controller 。所以我试图让一个 subview 观察另一个 View Controller subview 中的 NSCountedSet。关键路径是“相对于接收者”——我假设它是 subViewA。
最佳答案
直接与 set 对象对话不会发出 KVO 更改通知。您需要以符合 KVC 的方式更改属性的设置值。有两种方式:
mutableSetValueForKey:
消息。这将为您提供一个伪造的 set 对象,该对象包装该属性并围绕您对其所做的每个更改发布 KVO 通知。 [myCountedSet addObject:foo]
(在 addCountedSetObject:
中除外);你应该使用 [self addCountedSetObject:foo]
代替。 我推荐#2。听起来可能需要做更多的工作,但实际上并不多,而且可以编写出非常好的代码。
更多细节 in the Model Object Implementation Guide 和 in the Core Data Programming Guide (即使这不是特定于核心数据)。
关于cocoa - NSCountedSet 上的 KVO?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1610422/