应用程序崩溃创建ComponentDefinition Blackberry 10 Native的新对象实例

时间:2014-01-03 05:37:07

标签: qml blackberry-10

我正在使用createObject()创建ComponentDefinition的新对象实例,然后将其添加到容器中。当我的应用程序到达QML中的所述代码行时崩溃。

这是我的代码:

import bb.cascades 1.0
import Data.UpdateReservationView 1.0    //a custom C++ qmlRegisterType

Page {
   property alias resDetails: updateRes.resDetails

   attachedObjects: [
        ComponentDefinition {
            id: enhLabel
            Label {
                textStyle.fontSize: FontSize.PointValue
                textStyle.fontSizeValue: 5.5
                textStyle.color: Color.Black
            }    
        },

        UpdateReservationView {
            id: updateRes 
        }
   ]

   onResDetailsChanged: {
     // some code

     var newLabel = enhLabel.createObject();  //the app crashes upon reaching this line
     newLabel.text = resDetails[i]["roomName"];
     labelsContainer.add(newLabel);
   }

   ScrollView {
            topMargin: 30.0
            horizontalAlignment: HorizontalAlignment.Fill
            Container{
                leftPadding: 20.0
                rightPadding: leftPadding
                bottomPadding: 50.0
                horizontalAlignment: HorizontalAlignment.Fill
                Container { 
                   id: labelsContainer
                   horizontalAlignment: HorizontalAlignment.Left
                   verticalAlignment: VerticalAlignment.Center
                }
            }
   } //ScrollView ends
} //Page ends

我尝试使用.load()代替.createObject(),但得到的结果与 ComponentDefinition(enhLabel)在代码中的elswhere实例化相同,并根据我的理解.load()只是加载控件一次,而我需要动态多次创建它的新实例。

奇怪的是前一天代码运行完美,我没有对这个特定的QML文件进行任何更改。 可能是应用程序崩溃的原因。我确信它在使用旧的console.debug()方法到达var newLabel = enhLabel.createObject()行时崩溃了。

1 个答案:

答案 0 :(得分:0)

不确定您身边发生了哪些变化,但根据BB developer site上的代码示例,我可以看到您的代码看起来不错:

Container {
    Button {
        text: "Click to create bordered text"
        onClicked: {
             // Creates borderedTextComponent control and appends it
             // to the container
             var createdControl = borderedTextComponent.createObject();
             container.add(createdControl);
             createdControl.textString = "Hello Component";
             createdControl.padding = 30;
             createdControl.textColor = Color.DarkGray;
        }
    } 
    Container {
        id: container
    }
    attachedObjects: [
         ComponentDefinition {
             id: borderedTextComponent

             Container {
                 property variant borderColor: Color.Red
                 property variant fillColor: Color.White
                 property variant textColor: Color.Black
                 property string textString
                 property real padding: 10;

                 background: borderColor

                 leftPadding: padding
                 rightPadding: padding
                 topPadding: padding
                 bottomPadding: padding

                 Container {
                     background: fillColor
                     Label { 
                         text: textString
                         textStyle.color: textColor
                     }
                 }
             }
         }
     ]
} 

也许试试这个样本,看看你是否遇到环境问题,这个问题在标准的空Cascades项目中为我工作,并将代码粘贴到Page {}。

遗憾的是,您的代码中遗漏了太多东西,无法重现我的崩溃。