2012-12-28 103 views
0

我有一个通知,其处理程序:忽略不正确的编译器waring?

- (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参数警告:类型错误的。然而,当我用调试器跟踪行时,[theColumn info]解析为正确的类型并且行正确执行。

我可以忽略警告,但我不认为这是个好主意。我一直无法弄清楚为什么编译器认为[theColumn info]产生了错误类型的对象。帮帮我!

+2

不,不,不。 Xcode不做任何事情。编译器发出警告。 – 2012-12-28 20:25:26

+2

可以将不同类型的对象存储在其他对象类型中。仅仅因为调试器正确地解决了一些问题,并不意味着你在程序执行过程中并没有做一些早期的事情。 – CodaFi

+1

如何创建列,如何填充'info'字段,以及如何声明'setRepresentedColumn:'?其余的问题只是噪音。 – bbum

回答

3

您在theColumn参数上调用的任何info方法的声明类型与参数的声明类型setRepresentedColumn:不匹配。您可以通过转换为正确的类型来防止发出警告。

例如,如果setRepresentedColumn:正是如此宣称:

- (void)setRepresentedColumn:(MyColumnObject *)column 

,那么你可以更改最后一行:

​​

但是请注意,所有你正在做的是告诉编译器, “相信我,我知道这个对象是什么类型的,”让它闭嘴......如果[theColumn info]返回MyColumnObject以外的东西,那么仍然容易出现运行时错误。