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
それが違いを生む場合、モデルは aTreeModelSort
であり、 a をソートし、 aTreeModelFilter
をフィルタリングしListStore
ます。ListStore から複数の行が削除された直後にGetCardFromPath
が呼び出されると、エラーが発生します。HandleSelectionChanged
正常に動作することを妨げるものではないようですが、複数の行を削除するたびにエラーが連鎖するのは理想的ではありません。