Come arrivare NSFormatter sottoclasse di lavorare con NSTableColumn chiave di ordinamento e di selezione?
-
30-09-2019 - |
Domanda
La mia configurazione:
- Ho un database SQLite da cui io popolo un NSMutableArray di NSDictionary oggetti questo è il DataSource per il mio NSTableView.
- Una delle colonne detiene "tempo", il tempo è un galleggiante che tiene secondi.
- vorrei per visualizzare i valori in questa colonna come minuti: secondi. Per esempio i miei dati sarebbero 123,4329,387 mila voglio visualizzare 02:03, che non ho alcun problema facendo con una sottoclasse di NSFormatter (o NSNumberFormatter) applicata alla mia NSTextField nella colonna.
- Ho ordinamento creato utilizzando la colonna della tabella attributi in IB, non mi resta che il set specie chiave per "tempo" e il set di selezione per "confrontare"., Che funziona bene senza il formattatore
Al momento questo mi dà qualcosa di simile quando ho sort (decrescente)
01:37, 01:31, 00:10, 00:10, 00:09, 1:30, 1:30, 1:26, 0:09
e simili sciocchezze, sembra che qualcosa sta succedendo, ma non è assolutamente allineati.
Come faccio ad avere il tipo di sguardo ai dati sottostanti al posto del valore formattato? In alternativa, come faccio a specificare un metodo di ordinamento personalizzato e dove ho messo il codice per tale metodo? Ho cercato in giro un po 'e non ho trovato nulla a me dare una mano con questo problema, qualsiasi aiuto con questo è il più apprezzato.
Soluzione
Si scopre che quando è stato ordinamento stava usando confrontare: dalla classe NSString ma usava il dato numerico sottostante. Io non sono esattamente sicuro che cosa tutto sta succedendo sotto il cofano qui, ma sono riuscito a risolvere il problema con la creazione di mio proprio metodo compare in una categoria di NSString chiamato "timeCompare". Poi in Interface Builder ho appena messo "timeCompare:" nel campo di selezione per la colonna della tabella. Questo diventa per chiamare il mio metodo personalizzato confronto da cui ho appena convertito le corde dato a NSNumbers e chiamata confrontano:. Su di loro