4

配列コントローラーを介して、日付フィールドと日付を表示する列を持つコアデータエンティティにバインドされたセルベースのテーブルがあります。これらはすべて、コーディングなしでInterfaceBuilderで作成されます。列ヘッダーをクリックすると、コーディングや追加のバインディングなしで、日付で並べ替えられたデータを取得できます。ビューベースのテーブルでこの動作を取得するにはどうすればよいですか?コーディングに頼る必要がありますか?

日付は、キーobjectValue.dateを使用してテーブルセルビューにバインドされたテキストフィールドに表示されます。

4

3 に答える 3

4

たぶん、誰もこれらの新しいビューベースのテーブルを使用していないか、あるいは皆戸惑っているのかもしれません。3 週間が経ち、コードレスとまではいかない解決策を見つけたので、それを共有したほうがよいと思います。

その秘密はテーブルのソート記述子バインディングであり、これをNSSortDescriptorsの配列にバインドする必要があります。後から考えると明らかです。道徳:ブリキに書かれていることを理解しよう!私は単純に、ここでソート記述子を定義したり、ソート可能なオブジェクトにバインドしたりできると考えていました。Interface Builder は設計時のものです。もちろん、何も機能しませんでした。例を続けると、次のようになります。

配列プロパティを宣言します。私はアプリデリゲートでこれを行いました。

@property (assign) NSArray *dateSorters;

そして合成します。OS 10.7 では、一致する ivar は必要ありません。初期化します。私はこれをしましたapplicationDidFinishLaunching:

dateSorters = [NSArray arrayWithObject:
    [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO]];

それがアクティブなコードの唯一の行です。今バインディング。モデル キー パスdateSortersを使用して、配列コントローラーの並べ替え記述子をアプリ デリゲートにバインドします。可能性のリストに表示されない場合は、ビルドを試してください。テーブルがソートされて表示されます。列ヘッダーのクリックを機能させるには、テーブルのソート記述子を同じ配​​列にバインドし、列を日付フィールドに関連付ける必要があります。日付列を選択して、その値を配列コントローラーにバインドし、モデルを使用して配列オブジェクトをバインドします。 Key Path date、および checkソート記述子の作成. これは、セル ベースのテーブルに対して行う場合と同じです。日付列のヘッダーをクリックすると、並べ替え順序が切り替わるようになりました。意図したとおり、他の列ヘッダーをクリックしても何も起こりません。

小さな問題が 1 つ残っています。最初に表示されたとき、テーブルはソートされていません。

于 2012-05-02T20:59:47.853 に答える
2

テーブルのソート記述子バインディングを配列コントローラーのsortDescriptorsプロパティにバインドするようにしてください。

于 2014-06-13T15:12:26.720 に答える
1

これは少し遅れていますが、コードを 1 行も書く必要はありませんでした。代わりに、列の属性インスペクタに移動し、[ソート キー] フィールドを [日付] (引用符なし) に設定します。セレクターフィールドは自動的に「比較」に設定されます。

編集:それを行う必要さえないことがわかりました。セルベースのテーブルの場合と同様に、テーブルの列の値を、行を並べ替えるプロパティにバインドします。それだけです。この方法では、テーブル コンテンツ全体を配列コントローラーの配置されたオブジェクトにバインドしません。これは、ビューベースのテーブルに関する Apple ガイドと矛盾します。少なくとも、セルベースのテーブルを最初に作成してバインドしたときに、それがビューベースのテーブルに変換されたときに機能しました (属性インスペクター、Xcode 4.5.2、OS X 10.7.5)。ビューベースのテーブルから始めて列をバインドしてみましたが、並べ替えは機能しませんでした (単にエラーが発生しただけかもしれません)。

于 2012-11-05T20:42:34.537 に答える