2013-11-20 3 views
0

BB10 캐스케이드에서 불만을 겪고 있습니다.이벤트를 호출 한 QML 객체를 제거 할 때 크래시가 발생합니다.

동적 인 항목이있는 "대시 보드"페이지가 있습니다. 항목 자체에는 contextAction이 있습니다. 대시 보드에서 항목을 제거하는 작업 중 하나입니다. 그러나 항목을 제거하면 앱이 강제 종료됩니다.

코드의 추출물을 아래의 경우 : ticket.qml에서

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

는이 메소드를 호출 (ticketDefinition 사용)

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 untrackTicket 유틸리티 클래스에서 Dashboard.qml의 refreshTickets()를 호출합니다. 새로 고침이 실행되는 즉시 앱이 종료됩니다.

크래시에 대한 로그가 없습니다.

이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?

답변

0

untrackTicket에서 ticketContainer.add (obj)를 사용하여 추가 한 obj (컨트롤)가 가리키는 메모리를 비우고 있습니까?

나는 충돌이 일어나고 있다고 의심 : 컨테이너의 모든 컨트롤을 제거하고 자신의 메모리를 해제 : 문서를 말한다()

ticketContainer.removeAll(); 

에서 removeAll합니다.

이미 메모리를 비우는 경우 removeAll은 이미 삭제 된 개체를 삭제하려고 시도하므로 충돌합니다.

+0

감사합니다. 다른 곳에서 removeAll을 사용했는데 제대로 작동합니다. 컨트롤 중 하나가 트리거 작업을 담당 할 때 문제가되는 것처럼 보입니다. 나는 그 대신에 객체의 메모리를 지우지 않는 ticketContainer.remove()를 사용하여 문제를 해결할 수 있었다. 이상적은 아니지만이 경우에는 앱에서 사용자 당 2 개 이상의 티켓을 허용하지 않으므로 페이지가 닫히면 티켓이 메모리에서 지워집니다. – hyarion