看板 MacDev 關於我們 聯絡資訊
其實你應該做的是像這樣: @interface foo:NSObject - (IBAction)doJob:(id)sender; @end @implementation foo - (IBAction)doJob:(id)sender { label.text = @"Start"; call_your_c_function(); label.text = @"Finished"; } 不要老是想逆天從C去呼叫操作ObjC的東西... 不過這做法就不管如果使用者中途想暫停的話怎麼辦啦...要的話就要另外開thread 或者用GCD處理,而且相對的你的C function那邊也要檢查狀態就是。 ※ 引述《r0931265515 (蛙哥)》之銘言: : 小弟徹夜了解 objC 之後(繼承、封裝、多型等基本觀念),還是對於我現在做的 : program 有點問題。 : 顧名思義在我的一個 C function 裡,我成功的呼叫了以下的 ObjC_function : (大概的架構是這樣) : @interface A : NSObject : . : . : . : . : -(void) ObjC_function() : void C_fucntion() : @end : 但是我還需要做的是,我想要呼叫按鈕之間能做的事(例如我的按鈕會顯示"結束") : @interface B : UIViewController : . : . : . : IBOutlet UIButton *finishBtn; : IBOutlet UILabel *status; : -(IBAction) finish:(id)sender; : @end : 原本 finishBtn 是要手動按下,才會執行裡面的工作(最主要的是改變Label的文字) : ,現在想要直接自動地去做 finish() 裡能 work 的事情,而我的關鍵function就是 : 那個 C_function 。 : 不知道是否有大大能幫我解惑,感激不盡! : 謝謝! -- Luna quieres ser madre y no encuentras querer que te haga mujer -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.95.143
r0931265515:恩 感謝你的建議 因為我做的是 聲音訊號的部分 10/06 10:47
r0931265515:而我的C_function 能幫我偵測聲音並且結束 所以 才想 10/06 10:48
r0931265515:要利用顯示label的功能 提醒使用者知道已經偵測結束 10/06 10:49
r0931265515:Thread 也是種辦法 不過還是想說有沒有其他可能的作法 10/06 10:50
r0931265515:而那個 C_function 又是一個 callback function... 10/06 10:51
leondemon:通常都是high-level的語言呼叫low-level的語言 10/06 14:01
leondemon:我也很難理解這種逆天的作法... XD 10/06 14:01
Blueshiva:那我會建議把你的C function做些架構調整,不然這樣很難 10/07 11:22
Blueshiva:利用啊... 10/07 11:22
nobody1:file type可以指定c source 我用過.mm可以兼容c++ 10/08 00:40
nobody1:建議c還是打包成library比較好 10/08 00:41