我有一个数组,可以添加不同类的对象。
之后,此数组按两个类都具有的日期属性排序。
但是排序的数组没有按正确的顺序排序:
这是我的代码[viewDid中的某个地方]:
NSMutableArray *syncedAufgabe = [[NSMutableArray alloc] initWithCapacity:0];
// loop through termine and fetch each event and add it to the events array
for (Aufgabe *aufgabe in objects) {
NSString *calendarItemIdentifier = aufgabe.calendarItemIdentifier;
EKReminder *reminder = (EKReminder *)[self.eventStore calendarItemWithIdentifier:calendarItemIdentifier];
if (reminder == nil) {
// remove the respective aufgabe
[[cdh context] deleteObject:aufgabe];
} else {
[syncedAufgabe addObject:aufgabe];
}
}
[cdh saveContext];
NSSet *impfVorgaenge = patient.impf_vorgaenge;
for (ImpfVorgang *impfVorgang in impfVorgaenge) {
NSString *calendarItemIdentifier = impfVorgang.calendar_item_identifier;
EKReminder *reminder = (EKReminder *)[self.eventStore calendarItemWithIdentifier:calendarItemIdentifier];
if (reminder == nil) {
// remove respective impfVorgang
[[cdh context] deleteObject:impfVorgang];
} else {
[syncedAufgabe addObject:impfVorgang];
}
}
[cdh saveContext];
NSArray * sortedSyncedAufgaben = [syncedAufgabe sortedArrayUsingComparator:^(NSObject *a, NSObject* b) {
return [self compare:a to:b];
}];
这是从块
调用的比较方法-(NSComparisonResult)compare:(NSObject *)object to:(NSObject *) anotherObject{
NSDate *objectDate;
if ([object isKindOfClass:[Aufgabe class]]) {
Aufgabe *aufgabe = (Aufgabe *)object;
NSString *calendarItemIdentifier = aufgabe.calendarItemExternalIdentifier;
EKReminder *reminder = (EKReminder *)[self.eventStore calendarItemWithIdentifier:calendarItemIdentifier];
objectDate = [_gregorianCalendar dateFromComponents:reminder.dueDateComponents];
} else if ([object isKindOfClass:[ImpfVorgang class]]){
ImpfVorgang *impfVorgang = (ImpfVorgang *)object;
NSString *calendarItemIdentifier = impfVorgang.calendar_item_identifier;
EKReminder *reminder = (EKReminder *)[self.eventStore calendarItemWithIdentifier:calendarItemIdentifier];
objectDate = [_gregorianCalendar dateFromComponents:reminder.dueDateComponents];
}
NSDate *anotherObjectDate;
if ([anotherObject isKindOfClass:[Aufgabe class]]) {
Aufgabe *aufgabe = (Aufgabe *)anotherObject;
NSString *calendarItemIdentifier = aufgabe.calendarItemIdentifier;
EKReminder *reminder = (EKReminder *)[self.eventStore calendarItemWithIdentifier:calendarItemIdentifier];
anotherObjectDate = [_gregorianCalendar dateFromComponents:reminder.dueDateComponents];
} else if ([object isKindOfClass:[ImpfVorgang class]]){
ImpfVorgang *impfVorgang = (ImpfVorgang *)object;
NSString *calendarItemIdentifier = impfVorgang.calendar_item_identifier;
EKReminder *reminder = (EKReminder *)[self.eventStore calendarItemWithIdentifier:calendarItemIdentifier];
anotherObjectDate = [_gregorianCalendar dateFromComponents:reminder.dueDateComponents];
}
return [objectDate compare:anotherObjectDate];
}
简而言之,我根据对象所在的类提取日期,然后进行比较。
但是,aufgabe对象最终在数组的开头正确排序,最后在impfVorgang对象中排序,但未正确排序。
我想要实现的是,所有与其类别无关的对象按时间顺序排序。
感谢您的帮助。