7

我正在构建一个NSPredicateEditor,并且我希望能够进行高级日期比较。

我意识到我可以NSPredicateEditorRowTemplaterightExpressionTypeof构建一个NSDateAttributeType,但是我想要构建的谓词需要比这更高级。

例如,我需要进行基本比较,例如:

  • 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

我怎样才能实现这些比较?我知道我需要创建一个 custom NSPredicateEditorRowTemplate,但我还没有找到任何关于如何实现这样的事情的明确文档。

编辑 奖励积分也可用于了解如何使这些比较成为完整的日期时间(年-月-日-小时-分钟-秒)比较(因为NSDateAttributeType只有年-月-日粒度)。

4

2 回答 2

8

回想起来,这个答案似乎有些明显:

我实际上描述了3 个谓词编辑器行模板,而不是一个。这三个模板是:

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

如果您构建这三个谓词编辑器行模板并将它们提供给 predicateEditor,编辑器将意识到它们都在使用相同的dateKeyPath,并显示然后将它们的所有运算符压缩到一个弹出按钮中。然后它将根据选择的操作员切换到操作员右侧的实际视图。

编辑

对于奖励积分:您可以通过重写templateViews方法、从 检索 templateViews并在适当的选择器上super设置来修改日期选择器的精度。datePickerElements

编辑 2010 年 11 月 24 日

对于再次遇到此问题的任何人,我已经写了几篇关于创建自定义的博客文章NSPredicateEditorRowTemplates

于 2010-03-12T22:25:47.240 回答
0

我认为第二个谓词模板不会按预期工作。问题是您需要一个相对日期 - 一个相对于当前日期评估的日期。

我已经根据 Apple 工程师的一些代码(和建议)实现了这样一个谓词编辑器模板(以及所有相关的代码)。如果有人感兴趣,我可以提供详细信息等。我的实现非常复杂。

于 2010-08-24T21:44:25.860 回答