I'm building an NSPredicateEditor
, and I want the ability to do advanced date comparison.
I realize that I can build an NSPredicateEditorRowTemplate
with a rightExpressionType
of NSDateAttributeType
, but the predicates I want to build need to be much more advanced than that.
For example, I need to basic comparison like:
dateKeypath < aDate
dateKeypath <= aDate
dateKeypath = aDate
dateKeypath != aDate
dateKeypath > aDate
dateKeypath >= aDate
These basic comparisons are quite easy to achieve, and I have these working. However, I also need to do comparisons like:
dateKeypath isInTheLast n days
(or weeks, months, years)dateKeypath isNotInTheLast n days
(or weeks, months, years)dateKeypath between aDate and anotherDate
How can I achieve these sorts of comparisons? I understand that I'll need to create a custom NSPredicateEditorRowTemplate
, but I haven't found any clear documentation on how to achieve something like this.
EDIT
Bonus points are available for also knowing how to make these comparisons a full date-time (year-month-day-hour-minute-second) comparison (as NSDateAttributeType
only has year-month-day granularity).
In retrospect, this answer seems somewhat obvious:
I actually described 3 predicate editor row templates, not one. The three templates are:
dateKeyPath [<, <=, =, >, >=, !=] [NSDatePicker]
dateKeyPath [inTheLast, notInTheLast] [NSTextField] [NSPopUpButton]
dateKeyPath [between] [NSDatePicker] "and" [NSDatePicker]
If you build these three predicate editor row templates and give them to the predicateEditor, the editor will realize that they're all using the same dateKeyPath
, and display then crunch all their operators into a single popup button. It will then switch out the actual views to the right of the operator depending on which operator is selected.
Edit
For bonus points: you can modify the precision of the date pickers by overriding the templateViews
method, retrieving the templateViews from super
, and setting the datePickerElements
on the appropriate pickers.
Edit 24 Nov 2010
For anyone who comes across this again, I've written a couple blog posts on creating custom NSPredicateEditorRowTemplates
:
NSPredicateEditorRowTemplate
NSPredicateEditorRowTemplate
(this one shows how to do the inTheLast
and inTheNext
row template)If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With