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

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

4

0 に答える 0