gpt4 book ai didi

objective-c - 3 个通知而不是 1 个

转载 作者:行者123 更新时间:2023-12-03 17:45:19 27 4
gpt4 key购买 nike

我正在 Cocoa/Objective-C 中开发简单的 MVC 应用程序。我对通知和 KVO 有一个奇怪的问题(或误解)。

我在 MainMenu.xib 中有 AppController 对象,因此我实现了 awakeFromNib 方法,在其中注册 NSImageView 更改其 image 属性。我通过以下方式添加 self 作为观察者:

// options:3 equals to new/old passed values in changeDictionary
[backgroundImageView addObserver:self
forKeyPath:@"image"
options:3
context:NULL];

backgroundImageViewAppController 中连接到 NSImageViewIBOutlet

在标准 observeValueForKeyPath:ofObject:change:context 方法中,我只是记录收到的通知。

问题是 - 当我更改 NSImageViewimage 值时,我收到 3 个通知,而不是一个。你能帮我解决这个问题吗?也许我忽略了选项或一般注册观察者中的某些内容?

更新:backgroundImageViewBackgroundImageView类的实例,它是NSImageView的子类。我将后一个子类化,用于将拖放操作处理为拖动目标。当调用 performDragOperation: 时(拖动的最后一个“状态”),它会在 willChangeValueForKey 之间使用 setImage 更改 image 属性的值didChangeValueForKey

最佳答案

… it changes the value for image property with setImage between willChangeValueForKey and didChangeValueForKey.

当您发送访问者消息时,您会免费收到 KVO 通知。您应该删除 {will,did}ChangeValueForKey: 消息,因为它们至少是导致其中一个无关更改通知的原因。

关于objective-c - 3 个通知而不是 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1737431/

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