1

我在 Titanium 1.2.1 上使用 SDK 4.0 编译到具有 3.1.3 的设备。此崩溃不会在模拟器中表现出来,而只会在设备上表现出来。我有一个 tableView 列出了联系人列表。单击联系人姓名时,会打开一个新的重量级窗口(在不同的执行上下文中)。新窗口显示联系人的详细信息,例如他们的姓名和照片,然后它向服务器发出 ajax 请求以填写所有其他详细信息。

contactTableView.addEventListener('click', function(evt) {
    var contactWin = Ti.UI.createWindow({
        网址:“contacts_show.js”,
        标题:evt.rowData.title,
        背景颜色:colors.window_bg_color,
        barColor:colors.topbar_bg_color
    });
    contactWin.contact = evt.rowData.contact;

    Ti.UI.currentTab.open(contactWin, { 动画: true });
});

这通常适用于设备,除非您在联系人详细信息和联系人列表之间来回切换几次——然后它就会崩溃。

这是崩溃日志: http: //gist.github.com/557988

从崩溃日志来看,似乎当我来回走动时,它决定需要终止执行上下文以节省内存。但是在那个时候,当它试图删除一个事件监听器时,它看起来就像崩溃了。我不认为我对事件监听器做任何奇怪的事情。任何人都知道我该如何调试这个问题?提前致谢。

4

1 回答 1

0

我想到了。答案的简短版本是我将 addEventListeners 放在多次包含的文件中。因此,包含事件侦听器的数组在销毁执行上下文时被销毁时,在被迭代时被变异。因此,SIGABORT。

我将任何 addEventListener 调用移至任何执行上下文的顶级窗口文件,并且从未将其放入任何包含的文件中。

于 2010-09-02T09:06:44.963 回答