È possibile aggiungere una categoria per unificare il nome del campo data. Diciamo che le istanze di classe di un avere un campo "dateString" e le istanze della classe di B hanno un campo "creationDateString" ... Si potrebbe fare questo:
@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
Ora è possibile ordinare tutti gli oggetti nel vostro array loro proprietà sortDate
:
NSArray * sortedByDateArray = [ unsortedArray sortedArrayUsingComparator:^(id a, id b){
return [ [ a sortDate ] compare:[ b sortDate ] ] ;
}];
EDIT O con un descrittore di sorta:
NSArray * sortedArray = [ unsortedArray sortedArrayUsingDescriptors:[ NSArray arrayWithObject:[ NSSortDescriptor sortDescriptorWithKey:@"sortDate" ascending:YES ] ] ] ;
Casting gli oggetti dal 'id' è abbastanza inutile. – Chuck
Sì, ci sono diversi metodi "sortUsing ..." su NSArray, e ognuno di loro dovrebbe fare il lavoro. –
BTW - non è necessario eseguire 'isKindOfClass:' o 'respondsToSelector:' se si utilizzano le categorie .. – nielsbot