0

我有一个通知及其处理程序:

- (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]产生错误类型的对象。帮助!

4

1 回答 1

3

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

例如,如果setRepresentedColumn:这样声明:

- (void)setRepresentedColumn:(MyColumnObject *)column

那么您可以将最后一行更改为:

[_propertiesViewController setRepresentedColumn:(MyColumnObject *)[theColumn info]];

但是请注意,您所做的只是告诉编译器“相信我,我知道这个对象是什么类型”,以使其关闭……如果[theColumn info]返回的内容不是一个MyColumnObject

于 2012-12-28T23:48:49.500 回答