我正在使用SDK 4.0编译到具有3.1.3的设备的Titanium 1.2.1。此崩溃不会在模拟器中显示,而只会在设备上显示。 我有一个tableView列出了联系人列表。单击联系人姓名时,它会打开一个新的重量级窗口(在不同的执行上下文中)。新窗口显示联系人的详细信息,例如他们的姓名和图片,然后它向服务器发出ajax请求以填写所有其他详细信息。
contactTableView.addEventListener('click', function(evt) { var contactWin = Ti.UI.createWindow({ url: "contacts_show.js", title: evt.rowData.title, backgroundColor: colors.window_bg_color, barColor: colors.topbar_bg_color }); contactWin.contact = evt.rowData.contact; Ti.UI.currentTab.open(contactWin, { animated: true }); });
这通常适用于设备,除非您在联系人详细信息和联系人列表之间往返几次 - 然后崩溃。
以下是崩溃日志: http://gist.github.com/557988
从崩溃日志中,似乎当我来回走动时,它确定了需要杀死执行上下文以节省内存的程度。但是在那时,当它试图删除事件监听器时,它看起来像崩溃了。 我不认为我对事件监听器做了什么奇怪的事情。有谁知道如何调试这个问题?提前谢谢。
答案 0 :(得分:0)
我明白了。答案的简短版本是我将addEventListeners放在多次包含的文件中。因此,包含eventlisteners的数组在执行上下文被销毁时被销毁,在迭代时被突变。因此,SIGABORT。
我将任何addEventListener调用移动到任何执行上下文的顶级窗口文件,并且从不将它放在任何包含的文件中。