簡體   English   中英

從C調用Objective C

[英]Calling Objective C from C

我在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的新手!

您需要為回調函數提供指向包含標簽的視圖的指針以及一些更新它的方法。 所有回調函數都應該有一個某種上下文指針 ,它可以保存信息,允許它們執行特定於上下文的操作。 如果你不能改變回調函數的語義,那么你就會陷入困境,但是如果可以的話,你可以這樣做:

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

您需要在YourView提供updateLabelWithText方法,如果您正在使用ARC,那么在轉換contextInfo期間也會有一些橋接(編譯器會幫助您)。

為什么不在Objective C類中創建一個包裝器C函數來調用ObjC語法並從需要進行回調的C程序中調用C函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM