C# 在Gtk中,为什么即使在我用IterIsValid检查有效ITER后,有效ITER也会失败?
我的C# 在Gtk中,为什么即使在我用IterIsValid检查有效ITER后,有效ITER也会失败?,c#,gtk,gtk#,gtktreeview,C#,Gtk,Gtk#,Gtktreeview,我的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.GetVal
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\u ITER
如何在一个函数中失败,而该函数只有在IterIsValid
返回true
时才会被调用
如果有区别,则模型是一个
TreeModelSort
,它对TreeModelFilter
进行排序,过滤ListStore
。当刚刚从列表存储中删除多行时,从HandleSelectionChanged
调用GetCardFromPath
时会发生错误。它似乎不会阻止任何东西正常工作,但每当我删除多行时出现一系列错误并不是很理想。您能澄清一下“模型更改后”吗?是否替换ListStore或修改其内容?如果要替换,还需要重新连接TreeModelSort。