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 に答える