【问题标题】:App crashes with EXC_CRASH (SIGABRT) in Titanium's TableView应用程序在 Titanium 的 TableView 中因 EXC_CRASH (SIGABRT) 而崩溃
【发布时间】:2010-08-31 00:41:52
【问题描述】:

我在 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

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

【问题讨论】:

    标签: javascript iphone crash titanium


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多