NSPredicateEditorRowTemplate для сравнения даты

Я создаю NSPredicateEditor, и я хочу способность сделать усовершенствованное сравнение даты.

Я понимаю, что могу создать NSPredicateEditorRowTemplate с a rightExpressionType из 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

Как я могу достигнуть этих видов сравнений? Я понимаю, что должен буду создать пользовательское NSPredicateEditorRowTemplate, но я не нашел четкой документации относительно того, как достигнуть чего-то вроде этого.

Бонусные очки РЕДАКТИРОВАНИЯ доступны для того, чтобы также знать, как сделать эти сравнения полной датой и временем (year-month-day-hour-minute-second) сравнение (как NSDateAttributeType только имеет гранулярность дня месяца года).

6
задан Dave DeLong 10 March 2010 в 21:30
поделиться

1 ответ

Оглядываясь назад, этот ответ кажется очевидным:

Я фактически описал 3 шаблонов строк редактора предикатов, а не один. Вот три шаблона:

  • dateKeyPath [<, <=, =,>,> =,! =] [NSDatePicker]
  • dateKeyPath [inTheLast, notInTheLast] [NSTextField] [NSPopUpButton]
  • dateKeyPath [между] [NSDatePicker] "и" [NSDatePicker]

Если вы создадите эти три шаблона строк редактора предикатов и передадите их в predicateEditor, редактор поймет, что все они используют один и тот же dateKeyPath , и отобразит затем объедините всех своих операторов в одну всплывающую кнопку. Затем он отключит фактические представления справа от оператора в зависимости от того, какой оператор выбран.

Редактировать

Для бонусных баллов: вы можете изменить точность выбора даты, переопределив метод templateViews , получив templateViews из super и установив datePickerElements в соответствующих сборщиках.

Редактировать 24 ноября 2010 г.

Для тех, кто сталкивается с этим снова, я написал пару сообщений в блоге о создании пользовательских NSPredicateEditorRowTemplate :

8
ответ дан 16 December 2019 в 21:38
поделиться