1

次のような C のコールバック関数があります。

 void cfunc(char* labelUpdateText)

このコールバック関数は、ラベルの現在のテキストを labelUpdateText に変更することで、アプリの UI のラベルのテキストを更新することになっています。

したがって、cfunc では、この Objective C 関数を呼び出そうとしています。

-(void)updateLabel:(char*) text
{
    [_labelProp setStringValue:[NSString stringWithFormat:@"%@", [NSString stringWithUTF8String:text]]];
}

ただし、C 関数から目的の C 関数を呼び出すことはできません。

私はこのように試しました:

updateLabel:labelUpdateText

しかし、コードをビルドすると、「式の結果が未使用です」という警告が表示されます

そして、「updateLabel:labelUpdateText」は実行されません。

私は何を間違っていますか?

PS: 私は Objective C が初めてです!

4

2 に答える 2

3

コールバック関数に、ラベルを含むビューへのポインタとそれを更新する手段を提供する必要があります。すべてのコールバック関数には、コンテキスト固有のアクションを実行できるようにする情報を保持できる何らかのコンテキスト ポインターが必要です。コールバック関数のセマンティクスを変更できない場合は、行き詰まっていますが、変更できる場合は、次のようにします。

void cfunc(const char *labelUpdateText, void *contextInfo) {
    YourView *view = (YourView *)contextInfo;
    [view updateLabelWithText:[NSString stringWithUTF8String:labelUpdateText]];
}

updateLabelWithTextメソッドを提供する必要があり、YourViewARC を使用している場合は、キャスト中に同様にブリッジする必要contextInfoがあります (ただし、コンパイラが役立ちます)。

于 2013-10-29T16:54:29.640 に答える
0

ObjC構文を呼び出すObjective CクラスでラッパーC関数を作成し、コールバックを作成する必要があるCプログラムからC関数を呼び出すだけではどうですか。

于 2013-11-03T00:29:02.363 に答える