NSPredicateEditorRowTemplate для сравнения дат - PullRequest
6 голосов
/ 11 марта 2010

Я создаю NSPredicateEditor, и мне нужна возможность расширенного сравнения дат.

Я понимаю, что могу построить NSPredicateEditorRowTemplate с 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, но я не нашел четкой документации о том, как добиться чего-то подобного.

EDIT Бонусные баллы доступны также для того, чтобы знать, как сделать эти сравнения полным сравнением даты и времени (год-месяц-день-час-минута-секунда) (поскольку NSDateAttributeType имеет только гранулярность года-месяца-дня).

Ответы [ 2 ]

8 голосов
/ 13 марта 2010

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

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

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

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

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

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

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

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

0 голосов
/ 25 августа 2010

Не думаю, что второй шаблон предиката будет работать так, как ожидалось. Проблема в том, что вам нужна относительная дата - дата, которая оценивается относительно текущей даты.

Я реализовал такой шаблон редактора предикатов (со всем связанным кодом) на основе некоторого кода (и совета) от инженера Apple. Если кому-то интересно, я могу предоставить подробности и т. Д. Моя реализация довольно сложна.

...