Bạn có thể thêm danh mục để hợp nhất tên trường ngày. Hãy nói rằng trường lớp Một có một cái trường "dateString" và trường lớp B có một trường "creationDateString" ... Bạn có thể làm điều này:
@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
Bây giờ bạn có thể sắp xếp tất cả các đối tượng trong mảng của bạn bằng cách sở hữu sortDate
của họ:
NSArray * sortedByDateArray = [ unsortedArray sortedArrayUsingComparator:^(id a, id b){
return [ [ a sortDate ] compare:[ b sortDate ] ] ;
}];
EDIT Hoặc với một mô tả loại:
NSArray * sortedArray = [ unsortedArray sortedArrayUsingDescriptors:[ NSArray arrayWithObject:[ NSSortDescriptor sortDescriptorWithKey:@"sortDate" ascending:YES ] ] ] ;
đúc các đối tượng từ 'id' là khá cần thiết. – Chuck
Vâng, có một số phương pháp "sortUsing ..." trên NSArray, và bất kỳ một trong số họ nên thực hiện công việc. –
BTW - không cần chạy 'isKindOfClass:' hoặc 'respondsToSelector:' nếu bạn sử dụng các danh mục. – nielsbot