CallBack iOS无法正常工作

时间:2017-07-25 09:05:44

标签: objective-c codenameone

我试图从Objective-C(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);

我错过了什么吗?

1 个答案:

答案 0 :(得分: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();
}

您可以将任何内容传递给回调,因为调用永远不会发生,但您需要“调用”所有回调方法来欺骗优化器。