gpt4 book ai didi

cocoa - NSCountedSet 上的 KVO?

转载 作者:行者123 更新时间:2023-12-03 16:12:38 26 4
gpt4 key购买 nike

我想监视 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 移动到 viewController。所以我试图让一个 subview 观察另一个 viewController 的 subview 中的 NSCountedSet 。关键路径是“相对于接收者”——我假设它是 subViewA。

最佳答案

直接与设置的对象对话不会发出 KVO 更改通知。您需要以符合 KVC 的方式更改属性的设置值。有两种方法:

  1. 向属性(property)所有者发送 mutableSetValueForKey: 消息。这将为您提供一个假的 set 对象,该对象包装属性并针对您对其所做的每个更改发布 KVO 通知。
  2. 实现属性的 set 访问器方法,并在任何地方使用它们。每个方法的实现直接与底层集合对象对话;不在这些方法之一中的所有代码都应该通过它们。因此,例如,要添加对象,不应使用 [myCountedSet addObject:foo] (addCountedSetObject: 中除外);您应该使用 [self addCountedSetObject:foo] 来代替。

我推荐#2。这听起来可能需要更多工作,但其实并不多,而且它可以编写出非常好的代码。

更多详情in the Model Object Implementation Guidein the Core Data Programming Guide (尽管这不是特定于核心数据的)。

关于cocoa - NSCountedSet 上的 KVO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1610422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com