2017-07-25 71 views
4

我想從Objective-C(iOS)的本機接口實現中調用代碼名一類的靜態方法。因此我使用回調。我進口通緝類的頭文件和回撥iOS不工作

#include "CodenameOne_GLViewController.h"

建築作品,但回調不工作(該方法接受一個字符串,並顯示與給定的字符串一個對話框,但在運行時不顯示任何內容應用程序)。這裏是回調線:

package_ClassName_methodName___java_lang_String(CN1_THREAD_GET_STATE_PASS_ARG fromNSString(CN1_THREAD_GET_STATE_PASS_ARG myString));

哪裏我的字符串被聲明爲NSString * mySTring = @"hi!"

我試過了一個不帶參數的簡單回調方法。不幸的是,它也沒有工作。

package_ClassName_methodName__(CN1_THREAD_GET_STATE_PASS_SINGLE_ARG);

我錯過了什麼?

+0

發佈您的代碼片段 –

+0

您的聲明是mySTring,但您的傳遞myString。 T案例的差異是一個錯字? – GeneCode

回答

3

我猜優化器剝離了本機回調代碼,因爲它無法檢測到使用情況,所以回調正在發生,但方法是空白的。

你需要欺騙優化器,所以它不會在剝離主類,這些回調方法添加的申請:

boolean fake; 

通知我不初始化它,不申報的知名度,都是重要!

如果是私有的,javac可能會檢測到並優化它。

然後在你的初始化代碼做到這一點:

// this is always false and is here to prevent the optimizer from stripping code used from native code 
if(fake) { 
    MyCallbackClass.callback(); 
} 

你可以通過任何回調以來的通話將永遠不會發生,但你需要「調用」的所有回調方法來欺騙優化。