Objective c 忽略不正确的编译器警告?
我有一个通知及其处理程序:Objective c 忽略不正确的编译器警告?,objective-c,warnings,compiler-warnings,Objective C,Warnings,Compiler Warnings,我有一个通知及其处理程序: - (void) addObservers { ... [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleColumnCreated:) name:NNColumnCreated object:nil]; … } - (void) handleColumnCreated:(NSNotification*)notification { [_fo
- (void) addObservers
{
...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleColumnCreated:) name:NNColumnCreated object:nil];
…
}
- (void) handleColumnCreated:(NSNotification*)notification
{
[_formFields makeInfoForColumn:[notification object] FieldInfo:_propertiesViewController.representedObject];
[self setActiveColumn:[notification object]];
}
- (void) setActiveColumn:(id)theColumn
{
if (_activeColumn != nil)
{
[_activeColumn setBackgroundColor:_oldColumnColor];
}
_activeColumn = theColumn;
_oldColumnColor = [_activeColumn backgroundColor];
[_activeColumn setBackgroundColor:[NSColor greenColor]];
[_window makeFirstResponder:theColumn];
[_propertiesViewController setRepresentedColumn:[theColumn info]];
}
在setActiveColumn的最后一行,我收到一条警告,指出我发送给setRepresentedColumn:的参数类型错误。然而,当我使用调试器跟踪该行时,[column info]解析为正确的类型,并且该行正确执行
我可以忽略这个警告,但我认为这不是个好主意。我无法理解为什么编译器认为
[theColumn info]
生成了错误类型的对象。救命啊 在column
参数上调用的info
方法的声明类型与setRepresentedColumn:
参数的声明类型不匹配。您可以通过强制转换为正确的类型来防止此问题引起警告
e、 例如,如果setRepresentedColumn:
被声明为:
- (void)setRepresentedColumn:(MyColumnObject *)column
然后,您可以将最后一行更改为:
[_propertiesViewController setRepresentedColumn:(MyColumnObject *)[theColumn info]];
但是,请注意,您所做的只是告诉编译器,“相信我,我知道这个对象是什么类型的”,让它闭嘴。。。如果
[theColumn info]
返回的不是myColumn对象
您调用的info
方法的声明类型,column参数与setRepresentedColumn:
参数的声明类型不匹配,则仍然容易出现运行时错误。您可以通过强制转换为正确的类型来防止此问题引起警告
e、 例如,如果setRepresentedColumn:
被声明为:
- (void)setRepresentedColumn:(MyColumnObject *)column
然后,您可以将最后一行更改为:
[_propertiesViewController setRepresentedColumn:(MyColumnObject *)[theColumn info]];
但是,请注意,您所做的只是告诉编译器,“相信我,我知道这个对象是什么类型的”,让它闭嘴。。。如果
[theColumn info]
返回的不是MyColumnObject
,不,不,不,不,Xcode什么都不做,那么您仍然容易出现运行时错误。发出警告的是编译器。可以在其他对象类型中存储不同类型的对象。仅仅因为调试器正确地解析了某些内容,并不意味着您没有在程序执行过程中执行一些之前就已经准备好的操作。列是如何创建的,info
字段是如何填充的,以及setRepresentedColumn:
是如何声明的?剩下的只是问题上下文中的噪音。不,不,不。Xcode什么都不做。发出警告的是编译器。可以在其他对象类型中存储不同类型的对象。仅仅因为调试器正确地解析了某些内容,并不意味着您没有在程序执行过程中执行一些之前就已经准备好的操作。列是如何创建的,info
字段是如何填充的,以及setRepresentedColumn:
是如何声明的?剩下的只是问题背景下的噪音。