Sarà [nsset allObjects] restituire una matrice con lo stesso ordine ogni volta?
-
27-09-2019 - |
Domanda
Ho una lista di oggetti personalizzati inviata dal .NET WebService e sto loro memorizzazione utilizzando un a-molti dal enitity genitore con Core Data.
I desidera utilizzare la NSSet come origine dati per un UITableView e spingere un nuovo controller nello stack quando viene selezionata una riga.
Quando si utilizza [NSSet allObjects]
fa la matrice restituita sempre hanno lo stesso ordine? (Immagino non come set sono non ordinate)
Se no, come poi posso usare NSArray *myArray = [mySet allObjects];
in cellForRowAtIndexPath
per ottenere il nome per la textLabel
della cellula e poi di nuovo nel didSelectRowAtIndexPath
per assegnare l'oggetto al ViewController sta per essere spinto?
Ho già l'oggetto padre sintetizzato nel mio UITableViewDelegate
. Ho pensato anche avere un NSArray
sintetizzato e utilizzando allObjects
solo una volta in viewDidLoad
per creare, ma questo è la duplicazione dei dati in memoria
Soluzione
La soluzione, l'estrazione di un NSArray
una volta durante viewDidLoad
, è quella corretta. In realtà non sarà duplicare la quantità di memoria. Gli oggetti saranno ancora solo nella memoria di una volta; E 'solo che il vostro NSSet
e NSArray
saranno entrambi contengono puntatori a quegli oggetti.
Altri suggerimenti
Non c'è alcuna garanzia che saranno nello stesso ordine, dal momento che un NSSet
non lo fa (tecnicamente) a mantenere l'ordine. Se si dà il caso che gli oggetti non tornano nello stesso ordine ogni volta, quindi essere consapevoli che questo è un dettaglio di implementazione, non è documentato, e potrebbe potenzialmente essere modificato in una versione futura dei quadri.
Per citare la documentazione :
(rendimenti
-[NSSet allObjects]
) [a] n array contenente membri del set, o un array vuoto se l'insieme non ha membri. L'ordine degli oggetti nella matrice non è definito.
(enfasi aggiunta)
Usa NSOrderedSet invece di NSSet.