应用程序在Titanium的TableView中与EXC_CRASH(SIGABRT)崩溃

时间:2010-08-31 00:41:53

标签: javascript iphone crash titanium

我正在使用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

从崩溃日志中,似乎当我来回走动时,它确定了需要杀死执行上下文以节省内存的程度。但是在那时,当它试图删除事件监听器时,它看起来像崩溃了。 我不认为我对事件监听器做了什么奇怪的事情。有谁知道如何调试这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我明白了。答案的简短版本是我将addEventListeners放在多次包含的文件中。因此,包含eventlisteners的数组在执行上下文被销毁时被销毁,在迭代时被突变。因此,SIGABORT。

我将任何addEventListener调用移动到任何执行上下文的顶级窗口文件,并且从不将它放在任何包含的文件中。