1

我有一个方便的功能TreeView,看起来像这样:

Card GetCardFromPath (TreePath path)
{
    TreeIter iter;
    if (path == null || !Model.GetIter (out iter, path))
        return null;

    if ((Model as TreeModelSort).IterIsValid (iter))
        return (Card) Model.GetValue (iter, 0);

    return null;
}

大多数情况下,这可以正常工作,没有任何错误。但是当模型更改后直接调用它时,第 8 行给了我这些 Gtk 运行时错误:

[Fatal 16:53:02.448] [Gtk] gtk_list_store_get_value: assertion `VALID_ITER (iter, list_store)' failed
[Fatal 16:53:02.449] [GLib-GObject] g_value_unset: assertion `G_IS_VALUE (value)' failed

据我所知,我什至不需要检查IterIsValid,因为我已经在检查Model.GetIter. 即便如此,一个只在返回VALID_ITER时才被调用的函数怎么会失败?IterIsValidtrue

如果有区别,模型是 a TreeModelSort,它对 a 进行排序TreeModelFilter,过滤 a ListStore。当从 ListStore 中删除多行时GetCardFromPath调用时会发生错误。HandleSelectionChanged它似乎并没有阻止任何东西正常工作,但是每当我删除多行时出现级联错误并不是很理想。

4

0 回答 0