我试图从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);
我错过了什么吗?
答案 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();
}
您可以将任何内容传递给回调,因为调用永远不会发生,但您需要“调用”所有回调方法来欺骗优化器。