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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top