¿Cuál es la mejor manera de orderar una entidad de datos básicos?

Tengo un model de datos central totalmente funcional, pero cuando devuelvo los datos con una request de recuperación, está en un order aparentemente aleatorio. ¿Cuál es la mejor manera de orderar estos datos? ¿Es para usar otra tabla en el model de datos básicos y 'consultar' la primera? ¿O sería tirar los datos a una matriz y orderarlos de esa manera?

No estoy muy seguro de cómo hacer cualquiera de estos, que es la razón por la que hago esta pregunta.

Tu pregunta es bastante general, pero intentaré darte algunos consejos.

Cuando utiliza la class NSFetchRequest , puede especificar los descriptores de sorting.

Del doc de Apple:

Una matriz de descriptores de sorting (instancias de NSSortDescriptor ) que especifican cómo se deben orderar los objects devueltos, por ejemplo, por apellido y luego por nombre.

Aquí puede encontrar un ejemplo simple dentro de los Snippets de datos básicos doc

 NSManagedObjectContext *context = <#Get the context#>; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"<#Entity name#>" inManagedObjectContext:context]; [fetchRequest setEntity:entity]; NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"<#Sort key#>" ascending:YES]; NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; [fetchRequest setSortDescriptors:sortDescriptors]; NSError *error = nil; NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; if (fetchedObjects == nil) { // Handle the error } // release allocated objects if you don't use ARC 

Dónde

<#Entity name #> es el nombre de la entidad que desea recuperar, por ejemplo, Manager .

<#Sort key #> es el nombre de la key que usará la request para orderar, por ejemplo, el name es un atributo de la entidad Manager .

Entonces, en mi ejemplo:

 NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortByName, nil]; [fetchRequest setSortDescriptors:sortDescriptors]; 

Dado que setSortDescriptors: establece una matriz de descriptores de sorting, puede especificar varias keys en contra de las que desea orderar. Por ejemplo, especifique para orderar contra name y salary . Los descriptores de sorting se aplican en el order en que aparecen en la matriz sortDescriptors. Entonces, en mi ejemplo, primero por name y luego por salary .

Entonces, en mi ejemplo, podría convertirse

 NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; NSSortDescriptor *sortBySalary = [[NSSortDescriptor alloc] initWithKey:@"salary" ascending:YES]; NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortByName, sortBySalary, nil]; [fetchRequest setSortDescriptors:sortDescriptors]; 

Espero que ayude.

Editar

Como fetchedObjects contiene NSManagedObject (supongo que no cambió el tipo de resultado de su request), necesita iterar como sigue:

 for(NSManagedObject* currentObj in fetchedObjects) { NSLog(@"Print the name %@", [currentObj valueForKey:@"name"]); } 

Por lo tanto, necesita acceder a los attributes o relaciones a través de Key Value Coding. Para facilitarle la vida, podría pensar en crear subclasss NSManagedObject para las entidades que creó como organizing-core-data-for-ios .