使用混合对象排序数组无法正确排序

时间:2014-06-06 13:19:37

标签: ios objective-c sorting nsarray block

我有一个数组,可以添加不同类的对象。

之后,此数组按两个类都具有的日期属性排序。

但是排序的数组没有按正确的顺序排序:

这是我的代码[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对象中排序,但未正确排序。

我想要实现的是,所有与其类别无关的对象按时间顺序排序。

感谢您的帮助。

0 个答案:

没有答案