gpt4 book ai didi

iphone - cocoa KVO :observeValueForKeyPath:ofObject:change:context: is called twice for one value change

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

我有一个 NSOperation 子类,它实现 setFinished: 来生成 KVO 通知:

-(void)setFinished:(BOOL)isFinished
{
LogError(@"%@ will will changing isFinished to %d",self,isFinished);
[self willChangeValueForKey:@"isFinished"];
LogError(@"%@ did will changing isFinished to %d",self,isFinished);
_isFinished = isFinished;
LogError(@"%@ will did changing isFinished to %d",self,isFinished);
[self didChangeValueForKey:@"isFinished"];
LogError(@"%@ did did changing isFinished to %d",self,isFinished);
}

我也确信我只将观察者添加到操作中一次。

奇怪的事情来了,有时这个对象的isFinished键路径的observeValueForKeyPath:ofObject:change:context:被调用了两次,引用日志,我只发现setFinished: 调用一次,而此操作的 addObserver:forKeyPath: 仅调用一次。

另外,我发现它的顺序是这样的:

will will changing isFinished to 1
did will changing isFinished to 1
will did changing isFinished to 1
calling observeValueForKeyPath for object
did did changing isFinished to 1
calling observeValueForKeyPath for object

请问有人有任何线索吗?

最佳答案

如果你想负责调用willChangeValueForKey:didChangeValueForKey:,你必须告诉系统。您可以通过两种方式做到这一点:

如果您没有正确实现这些类方法之一,系统将在 setFinished: 返回时自动通知观察者。看起来这就是您在日志中看到的内容。

关于iphone - cocoa KVO :observeValueForKeyPath:ofObject:change:context: is called twice for one value change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17267572/

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