代码之家  ›  专栏  ›  技术社区  ›  Matthew

在Gtk#中,为什么即使我用IterIsValid检查有效ITER,它也会失败?

  •  1
  • Matthew  · 技术社区  · 16 年前

    我的电脑里有一个方便的功能 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 在函数中失败,只有在 退货 true ?

    如果有区别的话,模型就是 TreeModelSort ,有点像 TreeModelFilter ,用于过滤 ListStore . 错误发生在 GetCardFromPath 从调用 HandleSelectionChanged 当多行刚从ListStore中删除时。这似乎并不妨碍任何东西正常工作,但每当我删除多行时出现一系列错误并不是很理想。

    0 回复  |  直到 13 年前