7

を作成NSPredicateEditorしていますが、高度な日付比較を実行できるようにしたいと考えています。

を使用してを構築できることはわかっていますが、構築NSPredicateEditorRowTemplateしたい述語はそれよりもはるかに高度である必要があります。rightExpressionTypeNSDateAttributeType

たとえば、次のような基本的な比較が必要です。

  • dateKeypath < aDate
  • dateKeypath <= aDate
  • dateKeypath = aDate
  • dateKeypath != aDate
  • dateKeypath > aDate
  • dateKeypath >= aDate

これらの基本的な比較は非常に簡単に実行でき、私はこれらを機能させています。ただし、次のような比較も行う必要があります。

  • dateKeypath isInTheLast n days(または数週間、数か月、数年)
  • dateKeypath isNotInTheLast n days(または数週間、数か月、数年)
  • dateKeypath between aDate and anotherDate

どうすればこの種の比較を行うことができますか?カスタムを作成する必要があることは理解していますが、NSPredicateEditorRowTemplateこのようなことを実現する方法についての明確なドキュメントは見つかりませんでした。

EDIT ボーナスポイントは、これらの比較を完全な日時(年-月-日-時-分-秒)の比較(NSDateAttributeType年-月-日の粒度のみ)にする方法を知るためにも使用できます。

4

2 に答える 2

8

振り返ってみると、この答えはやや明白に思えます。

実際には、1つではなく、 3つの述語エディター行テンプレートについて説明しました。3つのテンプレートは次のとおりです。

  • dateKeyPath [<, <=, =, >, >=, !=] [NSDatePicker]
  • dateKeyPath [inTheLast, notInTheLast] [NSTextField] [NSPopUpButton]
  • dateKeyPath [between] [NSDatePicker] "and" [NSDatePicker]

これらの3つの述語エディター行テンプレートを作成してpredicateEditorに渡すと、エディターはそれらがすべて同じを使用していることを認識し、dateKeyPathすべての演算子を1つのポップアップボタンに表示してからクランチします。次に、選択したオペレーターに応じて、オペレーターの右側にある実際のビューを切り替えます。

編集

templateViewsボーナスポイントの場合:メソッドをオーバーライドし、からtemplateViewsを取得し、適切なピッカーにsuperを設定することで、日付ピッカーの精度を変更できます。datePickerElements

2010年11月24日編集

これに再び出くわした人のために、私はカスタムの作成に関するいくつかのブログ投稿を書きましたNSPredicateEditorRowTemplates

于 2010-03-12T22:25:47.240 に答える
0

2番目の述語テンプレートが期待どおりに機能するとは思いません。問題は、相対的な日付、つまり現在の日付と比較して評価される日付が必要なことです。

私は、Appleエンジニアからのコード(およびアドバイス)に基づいて、そのような述語エディターテンプレート(関連するすべてのコードを含む)を実装しました。興味のある方は詳細などをお知らせします。私の実装はかなり複雑です。

于 2010-08-24T21:44:25.860 に答える