我有一个方便的功能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
时才被调用的函数怎么会失败?IterIsValid
true
如果有区别,模型是 a TreeModelSort
,它对 a 进行排序TreeModelFilter
,过滤 a ListStore
。当从 ListStore 中删除多行时GetCardFromPath
调用时会发生错误。HandleSelectionChanged
它似乎并没有阻止任何东西正常工作,但是每当我删除多行时出现级联错误并不是很理想。