我希望为每个唯一日期在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]
我从未在重复日期得到过匹配。有没有人知道如何干净利落地做到这一点?
答案 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];
}