0

NSTableViewで多対多の関係の内容を順序付けておくのに問題があります。

私が持っているのは、NSArrayControllerによって管理されているエンティティ「Card」と多対多の関係にあるエンティティ「Relationship」です。カードには、NSTableViewの2つの列にBindingsを介して表示される「number」(int)と「name」(String)の2つの属性があります。テーブルの列を永続的に並べ替えることはできますが、カードを新しく挿入するたびに、テーブルビューの行がランダムに再配置されます(ただし、カードを削除すると行の順序が維持されます)。

私が望むのは次の動作です。ユーザーは列を並べ替えることができますが、カードを挿入すると、カードはテーブルの最後の行として表示されます(挿入時に直接並べ替えられませんが、もちろん、ランダムな再配置は表示されません。また)。ユーザーが再度並べ替えた場合にのみ、新しいカードも並べ替えられます。

対多関係の内容がセットになっていることは知っていますが、そこからどうやって進むのかわかりません。

助けていただければ幸いです。

4

2 に答える 2

1

テーブルの列が NSArrayController にバインドされている場合、配列の順序は固定されているため、行の順序がランダムになることはありません。さらに、配列コントローラーが使用するフェッチには、ソート順を強制するソート記述子が必要です。

ランダム化は、どこかでセットを配列にマッピングしていることを示しています。(セットには、ランダムな順序で一意のオブジェクトが含まれています。)

余談ですが、新しく追加された行をテーブルの最後に並べ替えるのは実装が難しく、UI 設計としても不適切です。

コア データとバインディングは、UI の任意の視覚的な場所ではなく、論理的な関係でデータを簡単かつ正確に表示することを目的としているため、実装が困難です。テーブルの最後に追加されたオブジェクトにとって論理的な意味がない場合は、Cardそこに表示されるようにするために多くの作業を行う必要があります。

他のすべてのカードが論理的な順序で表示されるときに、新しく追加されたカードがテーブルの最後に表示される理由をユーザーが理解できないため、これは悪い UI です。名前のアルファベット順に並べ替えられた表がある場合、ユーザーは、表の最後に「Zulu」の後に「Foxtrot」という名前のカードが表示される理由を理解できません。

代わりに、テーブルの外部の UI 要素に新しいカードを表示するか、適切に並べ替えられた新しいカードの場所までテーブルをスクロールする必要があります。

于 2010-08-02T13:07:59.723 に答える
0

基本的に、ソートされた NSArray にリレーション セットをキャッシュする必要があります。

との関係 NSSet のバージョンである NSArray を作成します[fooSet allObjects]。NSArray には、コンテンツのソートに使用できるいくつかのソート方法があります。ユーザーが新しいカードを追加すると、それを配列の最後に追加し、親オブジェクトの関係に追加します。

于 2010-08-02T12:44:14.217 に答える