gpt4 book ai didi

cocoa - 使用 addObserver :forKeypath:options:context: in init method 的奇怪问题

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

根据Apple和我见过的大量例子,使用KVO/KVC来观察自己是没有问题的。另外,根据这些相同的来源,通过在对象的 init 方法中使用 addObserver:forKeypath:options:context: 来设置它不是问题,la:

- (id)init
{
self = [super init];
if (self) {
[self addObserver:self
forKeyPath:@"selected"
options:NSKeyValueObservingOptionNew
context:NULL];
}
return self;
}

不幸的是,由于某种原因,当我在那里执行此操作时,我的观察者方法不会被调用。如果我将 addObserver 调用移至另一个方法,然后在调用方法中调用该方法:

MyObject *newObj = [[MyObject alloc] init];
[newObj setupObservers];

那么一切都很好。这是 NSImageView 的子类,所以这里不像有任何“awakeFromNib”类型的替代品......我真的在这里摸不着头脑,我确信我错过了一些明显的东西 - 比如关于事物的规则导致 self 上的 KVO 在 init 方法中不起作用,但我在文档中没有找到任何可以给我任何提示的内容。

我不知道什么?

最佳答案

问题可能是在您的情况下没有调用 -init,而是调用 -initWithCoder: 。

每个 Cocoa 类都有一组称为“指定初始化器”的 init 方法。每个对象在被实例化时,都保证会经历其继承树中每个类的一个且仅一个指定的初始值设定项。

如果您要子类化一个类并需要进行初始化,则必须覆盖父类(super class)的所有指定初始值设定项。

NSImageView 设计的初始化器是 -initWithCoder: 和 initWithFrame:。覆盖这两个,而不是初始化。

关于cocoa - 使用 addObserver :forKeypath:options:context: in init method 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1284967/

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