iphone core-data uitableview nsset

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.