0

我对列表/详细信息模式有疑问。我有一个 Article 类,继承自QObject,定义了一些属性(titleupdated并且content是现在重要的属性)。为了填充我的 (QML) ListView,我有一个 C++ GroupDataModel,其中填充了一些Article*. 这是我的清单onTriggered

onTriggered: {
    if (indexPath.length > 1) {
        currentArticle = dataModel.data(indexPath);
        var page = articlePageDefinition.createObject();
        nav.push(page)
    }
}

你可以猜到,articlePageDefinition使用 uppercurrentArticle属性定义了一个页面。

现在,当我显示 articlePage 一次时,它工作正常。我可以返回,单击相同的列表项,显示相同的Article详细信息,效果很好。但是当我选择第二篇文章时,该应用程序就冻结了。我可以返回导航窗格,但不能再单击列表项。我试图添加一些日志,onTriggered卡在currentArticle = dataModel.data(indexPath);. 此时,我可以dataModel.data(indexPath)毫无问题地记录每个属性。我试图不创建/推送页面,只是影响currentArticle和显示它的一些属性,它也可以正常工作。我真的不明白我在这里做错了什么,任何帮助表示赞赏。

如果您需要查看更多代码,一切都在这里:https ://github.com/Kernald/tt-rss-bb10/tree/e29e3b616aa179dd42f66804ecc20a6a45b6bb22

4

2 回答 2

1

这可能会导致您遇到的问题:

  1. 您创建 articlePage 并将其数据绑定到“currentArticle”全局变量
  2. 当您返回时,articlePage 不会被删除。
  3. 您打开同一个 articlePage 的另一个实例。最后一个仍然将其数据绑定到同一个 currentArticle 实例。
  4. 当您返回并单击另一个项目时:之前的文章页面仍然存在于内存中。它绑定到“currentArticle”。问题是,改变的不是“currentArticle”的数据,而是“currentArticle”引用的对象。Qml binder 就会失败。
于 2013-04-16T15:47:38.217 回答
0

我的应用程序有类似的行为,但如果原因相同,我没有检查您的 github 代码。我认为您可以比我更快地验证这一点。
删除和添加具有相同索引的列表项时,代码会卡住。我删除了有关用户操作的条目并在该位置添加了一个新条目,但它卡住了。这是 BB10 的一个已知问题,我在这里找到:https ://developer.blackberry.com/cascades/download/releasenotes/#known

于 2013-04-23T08:16:21.337 回答