【发布时间】:2013-06-24 03:20:35
【问题描述】:
我有一个 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);
}
我也确信我只将观察者添加到操作中一次。
奇怪的事情来了,有时候observeValueForKeyPath:ofObject:change:context:对于这个对象的isFinished键路径被调用了两次,参考日志,我发现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
请问有人知道吗?
【问题讨论】:
-
iphone标签表示 iOS,而cocoa表示 OSX。你是什么意思? -
KVO 在两个系统上都是一样的。
-
@rmaddy 我只是想让我的问题多暴露一点,如果我确实遇到了一些规定,请通知我,谢谢。
标签: iphone objective-c cocoa key-value-observing