iphone - ¿[NSSet allObjects] devolverá una matriz con el mismo orden cada vez?
core-data uitableview (3)
Tengo una lista de objetos personalizados que se devuelven desde .NET WebService y los estoy almacenando usando una relación To-Many de la entidad principal con Core Data.
Quiero usar el NSSet como el origen de datos para una UITableView y empujar un nuevo controlador en la pila cuando se selecciona una fila.
Al usar [NSSet allObjects]
¿la matriz devuelta siempre tiene el mismo orden? (Supongo que no como los conjuntos están desordenados)
Si no, ¿cómo puedo usar NSArray *myArray = [mySet allObjects];
en cellForRowAtIndexPath
para obtener el nombre de la textLabel
de textLabel
de la celda y luego nuevamente en didSelectRowAtIndexPath
para asignar el objeto al ViewController a punto de ser empujado?
Ya tengo el objeto padre sintetizado en mi UITableViewDelegate
. También he pensado en tener un NSArray
sintetizado y usar allObjects
solo una vez en viewDidLoad
para crear, pero esto es duplicar los datos en la memoria
No hay garantía de que estén en el mismo orden, ya que un NSSet
no mantiene (técnicamente) el orden. Si sucede que los objetos vuelven en el mismo orden cada vez, tenga en cuenta que se trata de un detalle de implementación, no está documentado y podría modificarse en una versión futura de los marcos.
Para citar la documentación :
(
-[NSSet allObjects]
regresa) [a] n matriz que contiene los miembros del conjunto, o una matriz vacía si el conjunto no tiene miembros. El orden de los objetos en la matriz no está definido.
(énfasis añadido)
Su solución, extraer un NSArray
una vez durante viewDidLoad
, es la correcta. En realidad no duplicarás mucha memoria. Sus objetos solo estarán en la memoria una vez; es solo que su NSSet
y NSArray
contendrán punteros a esos objetos.
Use NSOrderedSet en lugar de NSSet.