为唯一日期创建UITableView部分

时间:2013-01-10 02:14:02

标签: ios objective-c uitableview nsdate

我希望为每个唯一日期在UITableView中创建一个部分。

我的数据被格式化为一个对象数组,每个对象都包含一个NSDate

最初,我使用dateFormatter @“yyyy-MM-dd”将每个日期转换为字符串,并相应地比较日期字符串。但这很慢,似乎是错误的方式。

我还尝试使用以下方法从NSDate删除时间:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: trip.startTime];
[components setHour: 0];
[components setMinute: 0];
[components setSecond: 0];
NSDate *newDate = [gregorian dateFromComponents: components];

但是在使用数组函数时:

[allDays indexOfObject:newDate]

我从未在重复日期得到过匹配。有没有人知道如何干净利落地做到这一点?

2 个答案:

答案 0 :(得分:0)

所以,实际上我最终做的是创建一个数组字典来存储我的对象。 字典中的每个键都是一天,对象是我的对象数组(旅行)

for(Trip *trip in allTrips)
{

    NSString *dateString = [self dayString:trip.startTime];
    NSMutableArray *dayArray = [dict objectForKey:dateString];

    //is the day in the dictionary?
    if (dayArray == nil)
    {
        //This day is not in the dictionary

        //create an empty array
        dayArray = [[NSMutableArray alloc]init];

        //add the array to the dictionary
        [dict setObject:dayArray forKey:dateString];

    }

    //add the trip to the array
    [dayArray addObject:trip];

}

答案 1 :(得分:0)

indexOfObject:使用isEqual:方法来比较对象。所以你可以在自定义子类中覆盖它:

- (BOOL) isEqual:(id)object
{
    NSDateComponents* c1= [[NSCalendar currentCalendar]  components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate: self ];
    NSDateComponents* c2= [[NSCalendar currentCalendar]  components: NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate: object ];
    return [c1 isEqual: c2];
}