Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c KVO-Cocoa回调中不兼容的指针类型';类别';vs';NSObject*';_Objective C_Cocoa - Fatal编程技术网

Objective c KVO-Cocoa回调中不兼容的指针类型';类别';vs';NSObject*';

Objective c KVO-Cocoa回调中不兼容的指针类型';类别';vs';NSObject*';,objective-c,cocoa,Objective C,Cocoa,在使用KVO注册要更改的回调时,这会起作用,但会导致编译器警告 这是一个意外(它是有效的),还是有一些特殊的调味品我要申请压制警告?每个类是否都有一个全局单例'+'NSObject [defaults addObserver:[MyClass class] forKeyPath:@"values.SomeValueThatITrack" options:options context:nil]; 然后我的课堂上也有。m: +(void)observeValueForKeyPath:(NSSt

在使用KVO注册要更改的回调时,这会起作用,但会导致编译器警告

这是一个意外(它是有效的),还是有一些特殊的调味品我要申请压制警告?每个类是否都有一个全局单例'+'NSObject

[defaults addObserver:[MyClass class] forKeyPath:@"values.SomeValueThatITrack" options:options context:nil];
然后我的课堂上也有。m:

 +(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
{
    usual blah
}
实际警告字符串: “不兼容的指针类型正在将'Class'发送到'NSObject*'类型的参数”


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

强制转换observer参数可消除编译器警告:

[defaults addObserver:(id)[MyClass class] forKeyPath:@"values.SomeValueThatITrack" options:options context:nil];
看来类可以响应选择器,但不是NSObject的子类。类方法之所以有效,是因为类可以响应选择器


我很好奇,将类实例注册为观察者是否在所有情况下都有效,或者KVO是否要求观察者提供通常由NSObject提供的其他功能。

为什么要这样做,而不仅仅是创建一个单例?这不是通常的做法,所以您至少选择了测试较少的路径。SinglETON有各种与它们相关的代码,它们需要线程处理等特殊处理。因此,为了做单体,我需要创建一个完整的特殊简单类,它只是一个简单的单体的持有者,它只具有全局意义。在适当的类中只使用A+方法更简单。与复制和粘贴8行代码相比,可能未经测试的代码路径更简单,这与习惯用法和框架设计都不符,但我想这是您需要维护的代码库。类不是类,所以它不能是NSObject的子类,也没有实例。它只是一个指示指向类对象的指针的裸类型。类继承NSObject中的g确实得到了它的方法。虽然类是对象,但类不是类。这是有道理的,尽管这是一个令人困惑的安排。更新了我写的内容。我到这个线程有点晚了,但在静态类上调用observeValueForKeyPath是个好主意吗?它对我不起作用。这个线程也这么说。是的,它工作得很好。他说一个静态类正在观察一个真实的实例。这个问题是关于观察一个静态类的。