Tarih alanı adını birleştirmek için bir kategori ekleyebilirsiniz. Bunu yapabilirsiniz ... sınıf A'nın örneklerini saha "creationDateString" olan bir alan "dateString" ve sınıf B'nin örneklerini var diyelim:
@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
Şimdi onların sortDate
özelliği ederek dizideki tüm nesneleri sıralayabilirsiniz:
NSArray * sortedByDateArray = [ unsortedArray sortedArrayUsingComparator:^(id a, id b){
return [ [ a sortDate ] compare:[ b sortDate ] ] ;
}];
DÜZENLEME Veya bir tür tanımlayıcısı ile: id` `dan nesneleri Döküm
NSArray * sortedArray = [ unsortedArray sortedArrayUsingDescriptors:[ NSArray arrayWithObject:[ NSSortDescriptor sortDescriptorWithKey:@"sortDate" ascending:YES ] ] ] ;
oldukça gereksizdir. – Chuck
Evet, NSArray üzerinde birkaç "sortUsing ..." yöntemi vardır ve bunlardan herhangi biri işi yapmalıdır. –
BTW - "isKindOfClass:" veya "responsesToSelector:" işlevini çalıştırmanıza gerek yok. – nielsbot