【发布时间】: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