0

私のセットアップでは、Macに接続されたボリュームのNSCollectionViewがあります。NSCollectionViewItemのビューには、そのボリュームのコンテンツを一覧表示するNSTableViewを含むNSBoxがあります。

NSTableViewにアイテムを追加/削除しようとすると、問題が発生します。NSBoxは一度初期化されたように見えるため、NSTableViewは1つだけです。これは、NSTableView内のデータを更新する場合、IBOutletでreloadDataを呼び出して、すべてのテーブルを更新させることができないことを意味します。

NSBoxのサブクラスにIBOutletを作成すると、インスタンスではnilになるため、それを介して呼び出すことはできません。

私が最も近いのは、列の行でオブジェクトを返すコードの周りに@try @catchを囲むことです。そのアイテムが存在しないために例外が発生するため、tableViewを取得してreloadDataを呼び出すことができます。その特定のNSTableViewを更新します。

これに伴う問題は、削除されたアイテムがテーブルの最後にある場合、またはアイテムが追加された場合、既存のすべてのアイテムを表示できるため、例外が発生しないことです。

NSCollectionViewItemのビューでNSTableViewを使用した経験はありますか?テーブルをどのように更新しましたか?

4

1 に答える 1

1

NSBox(NSTableViewを含む)を独自のペン先に配置します。新しいコレクションビューアイテムを作成するたびに、ペン先をロードし、そのNSBoxをコレクションビューアイテムのビューとして設定して、NSBoxを解放します。

テーブルビューのフィードに関しては、おそらく最も簡単な方法はバインディングです。テーブルビューの各列を、コレクションビューアイテムが表すモデルオブジェクトの異なるプロパティにバインドします。もちろん、配列コントローラーを使用することをお勧めします。これは、コレクションビューアイテムごとに1つを用意し、それらを配列に追加することを意味します。これはでリリースしdeallocます。

于 2009-09-07T11:34:15.480 に答える