KVO - Cocoa回调'Class'与'NSObject *'中不兼容的指针类型

时间:2011-08-15 17:09:18

标签: objective-c cocoa

在注册使用KVO进行更改的回调时,这有效,但会产生编译器警告。

这是一次意外(它是否有效),或者我是否有一些特殊的酱汁用于抑制警告?每个类都有一个全局单例'+'NSObject吗?

[defaults addObserver:[MyClass class] forKeyPath:@"values.SomeValueThatITrack" options:options context:nil];

然后我也在MyClass.m中:

 +(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
{
    usual blah
}

实际警告字符串: “不兼容的指针类型将'Class'发送到'NSObject *'

类型的参数

KVO更改是与全局首选项相关的更改,因此可以由类本身处理,而不是任何单个实例。

1 个答案:

答案 0 :(得分:2)

转换observer参数会消除编译器警告:

[defaults addObserver:(id)[MyClass class] forKeyPath:@"values.SomeValueThatITrack" options:options context:nil];

所以看来Class可以响应选择器,但不是NSObject的子类。类方法起作用,因为类可以响应选择器。

我很好奇注册一个Class实例作为观察者是否适用于所有情况,或者KVO是否要求观察者提供NSObject通常提供的其他功能。