2010-03-10 10 views
6

Sto costruendo un NSPredicateEditor e desidero la possibilità di eseguire il confronto avanzato delle date.NSPredicateEditorRowTemplate per il confronto delle date

Mi rendo conto che posso creare un NSPredicateEditorRowTemplate con un rightExpressionType di NSDateAttributeType, ma i predicati che voglio costruire devono essere molto più avanzati di quello.

Per esempio, ho bisogno di confronto di base come:

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

Questi confronti di base sono abbastanza facili da ottenere, e ho questi funzionano. Tuttavia, ho anche bisogno di fare confronti, come:

  • dateKeypath isInTheLast n days (o settimane, mesi, anni)
  • dateKeypath isNotInTheLast n days (o settimane, mesi, anni)
  • dateKeypath between aDate and anotherDate

Come posso raggiungere questo tipo di confronti? Capisco che avrò bisogno di creare una custom NSPredicateEditorRowTemplate, ma non ho trovato alcuna documentazione chiara su come ottenere qualcosa di simile.

EDIT I punti bonus sono disponibili per anche saper fare questi confronti un full data-ora (anno-mese-giorno-ora-minuti-secondi) Confronto (come NSDateAttributeType ha solo anno-mese-giorno granularità).

risposta

8

Col senno di poi, questa risposta sembra un po 'ovvia:

realtà ho descritto modelli predicato fila editore, non uno. I tre modelli sono:

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

Se si costruisce questi tre presupposti modelli fila redattore e dà loro la predicateEditor, l'editor si renderà conto che sono tutti utilizzano lo stesso dateKeyPath e visualizzano quindi tutti i loro operatori in un unico pulsante popup. In questo modo, le visualizzazioni effettive a destra dell'operatore verranno disattivate in base all'operatore selezionato.

Modifica

per i punti bonus: è possibile modificare la precisione dei raccoglitori di data sovrascrivendo il metodo templateViews, recuperando i templateViews da super, e l'impostazione del datePickerElements sui raccoglitori appositi.

Modifica 24 nov 2010

Per chi si imbatte di nuovo, ho scritto un post paio di blog sulla creazione personalizzata NSPredicateEditorRowTemplates:

0

Non penso che il secondo modello di predicato funzionerà come previsto. Il problema è che è necessaria una data relativa, una data che viene valutata rispetto alla data corrente.

Ho implementato un modello di editor di predicati (con tutto il codice associato) basato su codice (e consigli) da un ingegnere Apple. Se qualcuno è interessato posso fornire i dettagli, ecc. La mia implementazione è abbastanza coinvolgente.

+0

Sì, alla fine ho funzionato anche quello. Mandami una mail con quello che ti è venuto in mente! Mi piacerebbe condividere note con te. –

+0

Sicuro. Sono un novellino di StackOverflow. Come posso inviarti un'e-mail? – mts

+0

il mio profilo ha un collegamento alla mia homepage, che ha un modulo di posta elettronica. –

Problemi correlati