Tengo una entidad CoreData con dos atributos. Uno llamado 'posición' el otro llamado 'posiciónCambio'. Ambos son enteros donde el atributo de posición es la posición actual y el cambio de posición es la diferencia entre la posición anterior y la nueva posición. Esto significa que el cambio de posición puede ser negativo.Ordenando cambios en la posición de los datos centrales con descripciones de clasificación para iPhone
Ahora me gustaría ordenar por positionChange. Pero me gustaría ignorar los valores negativos. Actualmente lo estoy ordenando de forma descendente, lo que dará el resultado: 2, 1, 0, -1, -2. Pero lo que estoy buscando es obtener este resultado: 2, -2, 1, -1, 0.
¿Alguna idea sobre cómo resolver esto usando las descripciones de clasificación?
EDITAR
Me dieron 2 clases, una llamada DataManager y el otro que contiene mi categoría NSNumber (positionChange es de tipo NSNumber).
En DataManager tengo un método llamado 'fetchData: donde estoy ejecutar mi solicitud de búsqueda con un descriptor para ordenar:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:managedObjectContext];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"positionChange" ascending:NO selector:@selector(comparePositionChange:)];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
que estoy haciendo algunas cosas más a la solicitud, pero eso no es interesante para este problema
categoríaMi NSNumber debe ser exactamente igual a la que envió: En el .h:
@interface NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber;
@end
Y en el .m:
@implementation NSNumber (AbsoluteValueSort)
- (NSComparisonResult)comparePositionChange:(NSNumber *)otherNumber
{
return [[NSNumber numberWithFloat:fabs([self floatValue])] compare:[NSNumber numberWithFloat:fabs([otherNumber floatValue])]];
}
@end
Cuando llamo fetchData en mi objeto DataManager Me sale este error:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unsupported NSSortDescriptor selector: comparePositionChange:'
¿Alguna idea de lo que podría ser el caso? He incluido mi archivo de encabezado de categoría NSNumber en mi clase DataManager.
¿Puedes agregar un campo 'absolutePositionChange' al modelo y poblarlo (en el setter para' positionChange', si hay uno) con 'abs (positionChange)'? Puede usar ese campo en su descriptor de ordenación. –