2010-03-10 11 views
6

Estoy construyendo un NSPredicateEditor, y quiero que la capacidad de hacer comparación de fechas avanzada.NSPredicateEditorRowTemplate para la comparación de fechas

Me doy cuenta de que puedo construir un NSPredicateEditorRowTemplate con un rightExpressionType de NSDateAttributeType, pero los predicados que quiero construir deben ser mucho más avanzados que eso.

Por ejemplo, necesito comparación básica como:

  • dateKeypath < aDate
  • dateKeypath <= aDate
  • dateKeypath = aDate
  • dateKeypath != aDate
  • dateKeypath > aDate
  • dateKeypath >= aDate

Estas comparaciones básicas son muy fácil de lograr, y esto lo he trabajo. Sin embargo, también hay que hacer comparaciones como:

  • dateKeypath isInTheLast n days (o semanas, meses, años)
  • dateKeypath isNotInTheLast n days (o semanas, meses, años)
  • dateKeypath between aDate and anotherDate

¿Cómo puedo lograr este tipo de comparaciones? Entiendo que tendré que crear un NSPredicateEditorRowTemplate personalizado, pero no he encontrado ninguna documentación clara sobre cómo lograr algo como esto.

EDIT Los puntos de bonificación están disponibles para también saber cómo hacer estas comparaciones una fecha a tiempo completo (año-mes-día-hora-minutos-segundos) comparación (como NSDateAttributeType sólo tiene año-mes-día granularidad)

Respuesta

8

En retrospectiva, esta respuesta parece algo obvio:

De hecho, me describió plantillas fila editor de predicado, no uno. Las tres plantillas son:

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

Si se construye estas tres plantillas de predicados fila editor y les da a la predicateEditor, el editor se dará cuenta de que son todos usan el mismo dateKeyPath, y luego muestran todos sus operadores en un solo botón emergente. Luego cambiará las vistas reales a la derecha del operador, dependiendo de qué operador se seleccione.

Editar

de puntos de bonificación: se puede modificar la precisión de los selectores de fecha reemplazando el método templateViews, la recuperación de los templateViews de super y ajuste de la datePickerElements en los recogedores apropiadas.

Edición 24 de Nov 2010

Para cualquier persona que se encuentra con esto otra vez, he escrito un par de blogs mensajes acerca de cómo crear NSPredicateEditorRowTemplates:

0

No creo que la segunda plantilla de predicado funcione como se esperaba. El problema es que necesita una fecha relativa, una fecha que se evalúa en relación con la fecha actual.

He implementado una plantilla de editor de predicados (con todo el código asociado) basada en algún código (y consejo) de un ingeniero de Apple. Si alguien está interesado, puedo proporcionar los detalles, etc. Mi implementación es bastante complicada.

+0

Sí, finalmente trabajé eso también. ¡Dispárame un correo electrónico con lo que se te ocurrió! Me encantaría compartir notas contigo. –

+0

Claro. Soy un novato de StackOverflow. ¿Cómo te envío un correo electrónico? – mts

+0

mi perfil tiene un enlace a mi página de inicio, que tiene un formulario de correo electrónico. –

Cuestiones relacionadas