2010-03-10 20 views
6

我正在構建一個NSPredicateEditor,我希望能夠進行高級日期比較。用於比較日期的NSPredicateEditorRowTemplate

我意識到我可以建立一個NSPredicateEditorRowTemplaterightExpressionTypeNSDateAttributeType,但我想構建的謂詞需要比這更先進。

例如,我需要象基本的比較:

  • 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,但是我還沒有找到任何關於如何實現這種功能的明確文檔。

編輯 獎勵積分可用於還知道如何充分利用這些比較完整的日期 - 時間(年,月,日,時,分,秒),比較(佔NSDateAttributeType只有年 - 月 - 日粒度)。

回答

8

回想起來,這個答案似乎有點明顯:

其實我描述謂詞編輯一行模板,沒有之一。這三個模板是:

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

如果你建立這三個謂語編輯行模板,給他們的predicateEditor,編輯器會意識到,他們全部使用相同的dateKeyPath,然後顯示,然後將其所有操作員關閉到一個單一的彈出式按鈕。然後根據選擇哪個操作員,將實際視圖切換到操作員右側。

編輯

獎勵積分:您可以通過重寫templateViews方法,從super檢索templateViews,並設置在相應的採摘修改datePickerElements日期選擇器的精度。

編輯2010年11月24日

對於任何人誰再次碰到這個事,我已經寫了幾個博客帖子上創建自定義NSPredicateEditorRowTemplates

0

我不認爲第二個謂詞模板將按預期工作。問題是你需要一個相對日期 - 一個相對於當前日期計算的日期。

我已經基於Apple工程師的一些代碼(和建議)實現了這樣一個謂詞編輯器模板(帶有所有相關的代碼)。如果有人有興趣,我可以提供詳細信息,等等。我的實施涉及很多。

+0

是的,我最終也是這樣做的。用你想出的東西給我發電子郵件!我很樂意與你分享筆記。 – 2010-08-24 22:50:03

+0

當然。我是一個StackOverflow新手。我如何給你發電子郵件? – mts 2010-08-25 01:38:21

+0

我的個人資料有鏈接到我的主頁,它有一個電子郵件表格。 – 2010-08-25 18:31:44