【问题标题】:CN1: ios app crashes when showing picker componentCN1:显示选择器组件时ios应用程序崩溃
【发布时间】:2017-02-14 22:12:19
【问题描述】:

我的 CN1 应用程序仅在 iOS 上崩溃(不是在 android 上)。 使用本机源代码和 xcode,我找到了错误位置:

当显示包含 Picker 组件的表单时出现错误。

在 xcode 中,我发现我的代码中的这一行导致了错误: picker.setType(Display.PICKER_TYPE_STRINGS);

我的代码:

private boolean setPicker() {
        picker.remove();
        picker.setSelectedString(null);
        picker.setType(Display.PICKER_TYPE_STRINGS);
        String[] arr = RatingObject.getListAsStringArray();
        if (arr.length > 0) {
            gui_ro_Picker.setStrings(arr);
        .....

错误:

Thread 5: EXC_BAD_ACCESS (code=1, address=0x0)

出现错误的代码:

#ifdef NEW_CODENAME_ONE_VM
JAVA_BOOLEAN com_codename1_impl_ios_IOSImplementation_instanceofObjArrayI___java_lang_Object_R_boolean(CN1_THREAD_STATE_MULTI_ARG JAVA_OBJECT n1)
{
    // second part of the expression check that this isn't a primitive array
    return n1->__codenameOneParentClsReference->isArray && cn1_array_start_offset + 100 < n1->__codenameOneParentClsReference->classId;
}

xcode 用错误显式标记 return

您对此有什么建议吗?

更新:

picker.setType(Display.PICKER_TYPE_STRINGS); 移动到构造函数中解决了这个问题。

【问题讨论】:

  • 你是在设置 Picker 类型之前设置字符串数组吗?您可以发布与您的 Picker 相关的代码吗?
  • 不,我只是将选定的字符串设置为空,我会尝试不这样做。我稍后会重新设置选择器,这就是为什么我需要 .remove 并认为 .setSelectedString(null) 可能有用;
  • 我认为这就是问题所在,它在模拟器上运行没有错误吗?尝试将该行包装在 try-and-catch 中。
  • 我会试试的!是的,它确实适用于模拟器和类似的 Android 设备。
  • 另外你为什么要做picker.remove()?

标签: codenameone


【解决方案1】:

对我来说,将 picker.setType(Display.PICKER_TYPE_STRINGS) 移动到构造函数中解决了这个问题。

感谢您的建议!

【讨论】:

    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 2013-08-31
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多