2010-03-10 55 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