CodenameOne IOS应用程序因null threadsToDelete而崩溃

CodenameOne IOS应用程序因null threadsToDelete而崩溃,codenameone,Codenameone,我有一个codenameOne应用程序,在Android上运行良好,但在iOS上偶尔会崩溃 从xcode看,它似乎在以下方面失败: JAVA_VOID java_lang_Thread_releaseThreadNativeResources___long(CODENAME_ONE_THREAD_STATE, JAVA_LONG nativeThreadId) { for(int i = 0 ; i < NUMBER_OF_SUPPORTED_THREADS ; i++) { if

我有一个codenameOne应用程序,在Android上运行良好,但在iOS上偶尔会崩溃

从xcode看,它似乎在以下方面失败:

JAVA_VOID java_lang_Thread_releaseThreadNativeResources___long(CODENAME_ONE_THREAD_STATE, JAVA_LONG nativeThreadId) {
for(int i = 0 ; i < NUMBER_OF_SUPPORTED_THREADS ; i++) {
    if(threadsToDelete[i] != 0 && threadsToDelete[i]->threadId == nativeThreadId) {
        free(threadsToDelete[i]->blocks);
        free(threadsToDelete[i]->threadObjectStack);
        free(threadsToDelete[i]->callStackClass);
        free(threadsToDelete[i]->callStackLine);
        free(threadsToDelete[i]->callStackMethod);
        free(threadsToDelete[i]->pendingHeapAllocations);
        free(threadsToDelete[i]);

        threadsToDelete[i] = 0;
        break;
    }
}
JAVA\u VOID JAVA\u lang\u Thread\u releaseThreadNativeResources\uuuuuuuu long(代码名\uOne\uThread\u状态,JAVA\uLong nativeThreadId){
for(int i=0;i<支持的线程数;i++){
if(threadsToDelete[i]!=0&&threadsToDelete[i]->threadId==nativeThreadId){
空闲(线程删除[i]->块);
免费(threadsToDelete[i]->threadObjectStack);
免费(threadsToDelete[i]>callStackClass);
免费(threadsToDelete[i]->callStackLine);
free(threadsToDelete[i]->callStackMethod);
免费(线程删除[i]->挂起分配);
免费(删除[i]);
threadsToDelete[i]=0;
打破
}
}
}

在nativeMethods.m。在if语句中表示threadsToDelete为null。当我打开一个显示图片的新表单,然后切换回原始表单时,似乎会发生这种情况。我确实启动了一个新线程来将某些细节保存到amazon。但它并不是每次都崩溃。

我已经在Github中解决了这个问题。它将包含在下一次生成服务器更新中(可能是今天,可能是下周)。

上面哪一行说它是0?该项是在数组0中还是数组
threadsToDelete
本身为0?有没有一种方法可以用一个简单的测试用例来重现这一点?第3行,if语句threadsToDelete[i]为null。对不起,我不知道如何用一个简单的测试用例重现。我对这段代码所做的事情了解不够,无法确定是我的应用程序的哪个部分导致了它。就像我说的,我为各种后台任务启动了一些线程。如果您对导致这种情况的原因有任何想法,我可能能够找出一个测试用例?如果
threadsToDelete[I]
==0,这很好,因为这是在此处测试的有效状态。如果
threadsToDelete
为0,则会出现问题。你能从xcode发布堆栈跟踪吗?@shaiAlmog我对xcode完全陌生,我甚至不知道如何获取堆栈跟踪的副本。对不起,如果有帮助的话,我已经添加了一个屏幕截图。谢谢!谢谢你的帮助。