2013-04-25 12 views
9

Ho un elenco di prezzi delle azioni con le proprietà dateTime e value.Set ordinati e dati principali (NSOrderedSet)

Attualmente sto ordinando i prezzi delle azioni durante il recupero utilizzando un descrittore di ordinamento.

Ora, desidero modificare il mio codice e memorizzarlo in ordine già ordinato per recuperare più rapidamente il prezzo di condivisione più aggiornato (dateTime = max).

sto inserendo i prezzi delle azioni a uno a uno utilizzando

SharePrice *priceItem= [NSEntityDescription insertNewObjectForEntityForName:@"SharePrice" inManagedObjectContext:context];

Come posso ordinare i prezzi delle azioni a destra dopo l'inserimento utilizzando un descrittore di sorta sulla dateTime?

o se ho bisogno di convertirlo in un NSMutableOrderedSet e utilizzare sortUsingComparator:?

Grazie!

risposta

21

Ordered property on CoreData

Selezionare la casella ordinato della vostra proprietà nel modello CoreData.

Assicurarsi inoltre di impostare la migrazione automatica di CoreData in AppDelegate (dizionario delle opzioni durante la creazione di PersistentStore). In questo modo CoreData sarà in grado di apportare questa modifica senza perdita di dati.

+1

Come posso riordinare un set ordinato esistente nel database? – AlexR

+0

Penso che non puoi farlo automaticamente. È possibile creare una funzione in base ad alcuni criteri come l'ordine o la data. Se cambi un 'NSSet' in' NSArray' nel tuo modello CoreData, presumo che non avessi un ordine prima, quindi otterrà "allObjects" dal vecchio 'NSSet' e lo aggiungerà al tuo array. –

0

Non sono sicuro di come l'utilizzo di un NSMutableOrderedSet possa influire sul database sqlite sottostante. È bello pensare che lo memorizzerebbe nell'ordine del set, ma l'implementazione sottostante è una blackbox e non credo che ci sia alcuna garanzia che funzionerebbe in modo coerente, se funzionasse del tutto.

Se si tratta di un guadagno di prestazioni che si sta cercando, penso che aggiungere un indice a tale attributo sarebbe l'approccio migliore.

+0

Con che gli indici detto, mysql non supporto cluster (che colpisce il genere su disco). Non sono sicuro che sia esposto in CoreData, ma è qualcosa che potresti esaminare. –

+0

Ho l'attributo indicizzato e faccio l'ordinamento con ogni fetch. Tuttavia, ho bisogno di migliorare le prestazioni e vorrei memorizzare gli articoli in ordine. – AlexR

+8

Cosa c'entra MySQL qui? –

3

vorrei aggiungere alla risposta accettata, se si dispone di un NSSet, deve essere cambiata in una NSOrderedSet dopo aver selezionato la casella di controllo ordinato

+0

Grazie, questo è il dettaglio su come passare a un NSOrderedSet è quello che sono venuto qui per trovare. –

Problemi correlati