आप दिनांक फ़ील्ड नाम को एकीकृत करने के लिए एक श्रेणी जोड़ सकते हैं। मान लीजिए कि वर्ग एक के उदाहरणों एक क्षेत्र "डेटस्ट्रिंग" और वर्ग बी के उदाहरण सामने एक क्षेत्र "creationDateString" करते हैं ... आप ऐसा कर सकता है:
@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
अब आप अपने sortDate
संपत्ति के आधार पर आपके सरणी में सभी वस्तुओं को सॉर्ट कर सकते हैं:
NSArray * sortedByDateArray = [ unsortedArray sortedArrayUsingComparator:^(id a, id b){
return [ [ a sortDate ] compare:[ b sortDate ] ] ;
}];
संपादित या एक तरह से वर्णनकर्ता के साथ:
NSArray * sortedArray = [ unsortedArray sortedArrayUsingDescriptors:[ NSArray arrayWithObject:[ NSSortDescriptor sortDescriptorWithKey:@"sortDate" ascending:YES ] ] ] ;
'id' से वस्तुओं कास्टिंग काफी अनावश्यक है। – Chuck
हां, एनएसएआरएआरई पर कई "sortUsing ..." विधियां हैं, और उनमें से किसी एक को नौकरी करना चाहिए। –
बीटीडब्लू - 'isKindOfClass:' या 'प्रतिक्रियाओं को चुनने की कोई ज़रूरत नहीं है:' अगर आप श्रेणियों का उपयोग करते हैं .. – nielsbot