1

属性の 1 つとして DEALNAME を持つエンティティ OBSERVATION を持つコア データ アプリがあります。Interface Builder を介して参照するか、NSArrayController にカスタム変更を加えて、並べ替えられた固有の dealnames のリストを参照して、ポップアップで使用できるようにしたいと考えています。

@distinctUnionOfSets (および @distinctUnionOfArrays) を使用しようとしましたが、適切なキー シーケンスを見つけることができません。

並べ替え記述子を指定して ArrayController を並べ替えることができますが、重複を排除する方法がわかりません。

@distinct... キーは正しい方法論ですか? IB の使用を最適化する最も簡単な方法を提供するように思われます。

重複を削除するための述語形式はありますか?

または、カスタム コントローラーを使用して特定の取引名の NSSet を抽出し、それらを配列に戻して並べ替え、IB からカスタム配列を参照する必要がありますか?

どんな助けでも大歓迎です。他の人がテーブルビューでソートされたユニークなポップアップを作成しようとしなかったことに驚いています.

4

2 に答える 2

0

をご覧になる必要があります-[NSFetchRequest returnsDistinctResults]。これは、データの一意化を処理するために必要なレベルです。

于 2010-05-09T01:50:45.960 に答える
0

明確な答えはありませんが、2 つの方法があると思います。

  1. あなたがすでに始めた方法。arrayController.arrangedObjects に対してだけでなく、PopUp ボタンのコンテンツ配列をバインドする必要がありますが、パスを続行して、異なる「DealName」を持つオブジェクトのみをフィルタリングする必要があります。つまり、arrayController はすべてのエンティティを表示します (そして、それらを並べ替えることができます) が、PopUp ボタンは、アレイ コントローラへの洗練されたバインディングを介してそのコンテンツ フィルターを持ちます。

  2. ArrayController レベルでフィルタリングを行います (ここの別の回答で提案されているように)。ここでは、アレイ コントローラの設定方法によって異なります。「エンティティ」(vs.「クラス」) を使用するように設定されている場合、つまりアレイ コントローラーが CoreData エンティティを直接フェッチすることを意味します。その「フェッチ」を変更して、個別の値を持つ「OBSERVATION」エンティティのサブセットのみを取得することができます。 「DEALNAME」の。この場合、どのエンティティが除外されるかを制御する方法がわかりません。それ以外の場合は、「クラス」オブジェクトで動作するように arrayController をセットアップしてから、自分で (コードで) エンティティをフェッチし、好きなエンティティだけをプログラムで arrayController に入力することができます。

2 番目のオプションでは、Popup ボタンを arrayController の ArrangeObjects に通常どおりバインドする必要があります。

于 2016-02-13T19:17:27.857 に答える