Puede agregar una categoría para unificar el nombre del campo de fecha. Digamos que las instancias de clase de un tener un campo "DateString" y las instancias de clase de B tienen un campo "creationDateString" ... Usted puede hacer esto:
@implementation A (SortByDate)
-(NSDate*)sortDate
{
static NSDateFormatter * formatter = nil ;
static dispatch_once_t once = 0 ;
dispatch_once(& once, ^{ formatter = ... }) ;
return [ formatter dateFromString:self.dateString ] ;
}
@end
@implementation B (SortByDate)
-(NSDate*)sortDate
{
static NSDateFormatter * formatter = nil ;
static dispatch_once_t once = 0 ;
dispatch_once(& once, ^{ formatter = ... }) ;
return [ formatter dateFromString:self.creationDateString ] ;
}
@end
Ahora usted puede ordenar todos los objetos de la matriz por sus propiedades sortDate
:
NSArray * sortedByDateArray = [ unsortedArray sortedArrayUsingComparator:^(id a, id b){
return [ [ a sortDate ] compare:[ b sortDate ] ] ;
}];
EDITAR o con un descriptor para ordenar:
NSArray * sortedArray = [ unsortedArray sortedArrayUsingDescriptors:[ NSArray arrayWithObject:[ NSSortDescriptor sortDescriptorWithKey:@"sortDate" ascending:YES ] ] ] ;
reparto de los objetos 'id' es totalmente innecesario. – Chuck
Sí, hay varios métodos de "ordenamiento ..." en NSArray, y cualquiera de ellos debería hacer el trabajo. –
BTW - no es necesario ejecutar 'isKindOfClass:' o 'respondsToSelector:' si utiliza categorías ... – nielsbot