删除调用事件的QML对象时崩溃

时间:2013-11-20 15:37:04

标签: qml blackberry-10 blackberry-cascades

我在BB10级联中遇到了令人沮丧的崩溃。

我有一个“信息中心”页面,其中包含动态数量的项目。项目本身有contextActions。其中一项操作是从仪表板中删除该项目。但是当我删除项目时,应用程序只是强行关闭。

代码摘录如下:

Dashboard.qml

...
Container {
    id: ticketContainer
    bottomPadding: 20
    horizontalAlignment: HorizontalAlignment.Fill
}
...
function refreshTickets() {
    ticketContainer.removeAll();
    for (var i=0; i<tickets.length; i++) {
        var obj = ticketDefinition.createObject();
        obj.bookingRef = tickets[i].bookingReference;
        obj.bookingDate = ticket[i].bookingDate;
        ticketContainer.add(obj);
    }
}

Ticket.qml(用于ticketDefinition)

...
contextActions: [
    ActionSet {
        ActionItem {
            id: actionUnTrack
            title: "Remove this Ticket"
            onTriggered: {
                untrackTicket(bookingRef);
            }
        }
    }
]
...

在ticket.qml中,它在实用程序类中调用一个方法untrackTicket,完成后将调用Dashboard.qml中的refreshTickets()。一旦刷新,应用程序就会关闭。

没有崩溃的日志。

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:0)

在untrackTicket中,你是否正在释放你使用ticketContainer.add(obj)添加的obj(控件)所指向的内存?

我怀疑崩溃发生在:

ticketContainer.removeAll();

removeAll()文档说:删除所有容器的控件并释放内存。

如果您已经释放了该内存,则removeAll将尝试删除已被删除的对象,因此会崩溃。