2

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]

我从来没有在重复的日期匹配。有谁知道如何干净地做到这一点?

4

2 回答 2

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];

}
于 2013-01-10T02:31:58.043 回答
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];
}
于 2013-01-10T03:17:04.087 回答