【问题标题】:CallBack iOS not working回调 iOS 不工作
【发布时间】:2017-12-31 02:33:35
【问题描述】:

我正在尝试从 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);

我错过了什么吗?

【问题讨论】:

  • 发布你的代码sn-p
  • 您的声明是 mySTRing,但您传递的是 myString。 T case 的区别是错别字?

标签: objective-c codenameone


【解决方案1】:

我猜优化器剥离了本机回调代码,因为它无法检测到使用情况,所以回调正在发生,但方法是空白的。

您需要欺骗优化器,使其不会在您的主类中剥离这些回调方法添加字段:

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();
}

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

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 2012-08-17
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多