2010-03-10 2 views
6

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

Я понимаю, что могу построить NSPredicateEditorRowTemplate с rightExpressionTypeNSDateAttributeType, но предикаты, которые я хочу построить, должны быть намного более продвинутыми, чем это.

Например, мне нужно основной сравнения, как:

  • 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 имеет только год-месяц-день зернистость).

ответ

8

В ретроспективе, этот ответ кажется несколько очевидным:

я фактически описал шаблонов сказуемого редактора строка, а не один. Три шаблоны:

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

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

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

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

Редактировать 24 Ноябрь 2010

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

0

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

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

+0

Да, я в конечном итоге тоже работал. Стреляйте мне по электронной почте с тем, что вы придумали! Я хотел бы поделиться с вами записками. –

+0

Несомненно. Я новичок в StackOverflow. Как мне отправить вам электронное письмо? – mts

+0

В моем профиле есть ссылка на мою домашнюю страницу, у которой есть электронная почта. –