我有一个plist,它包含一个代表某个事件的NSDictionary的数组,每个字典包含关于事件的一些信息和一个带有事件日期的NSDate。日期分区表?
我想非常创建这个日期分段表视图就像当你点击“列表”视图所附带iPhone的日历应用。你可以看到只有有事件日期的部分。
那么最好的方法来找出开始有多少NSDictionary的具有相同的日期(所以我知道有多少部分创建和每个部分有多少行,因为每个部分将有不同的数量或行)。
感谢
我有一个plist,它包含一个代表某个事件的NSDictionary的数组,每个字典包含关于事件的一些信息和一个带有事件日期的NSDate。日期分区表?
我想非常创建这个日期分段表视图就像当你点击“列表”视图所附带iPhone的日历应用。你可以看到只有有事件日期的部分。
那么最好的方法来找出开始有多少NSDictionary的具有相同的日期(所以我知道有多少部分创建和每个部分有多少行,因为每个部分将有不同的数量或行)。
感谢
我确实非常相似,这为重新连接,除了我的部分是多年(见历史截图)的东西。
在步骤5结束时,你应该有部分的阵列。从该部分中,您可以向它发送一条消息,说明您添加到表示表中每行的部分中的NSDictionary的数量。
一点解决这个演出之后就是我想出了,此刻它只是一个基础工具,以保持它的清晰。
#import <Foundation/Foundation.h>
NSDate* normalizedDateWithDate(NSDate *date) {
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comp = [calendar components:unitFlags fromDate:date];
return [calendar dateFromComponents:comp];
}
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *plistPath = @"flights.plist";
NSArray *array = [[NSArray alloc] initWithContentsOfFile:plistPath];
NSMutableSet *flightDates = [[NSMutableSet alloc] init];
for (NSDictionary *oneFlight in array)
[flightDates addObject:normalizedDateWithDate([oneFlight objectForKey:@"flightDate"])];
NSLog(@"Number of Sections Required: %d", [flightDates count]);
NSMutableDictionary *datesAndFlights = [[NSMutableDictionary alloc] init];
for (NSDate *fDate in flightDates) {
NSMutableArray *sectionFlights = [[NSMutableArray alloc] init];
for (NSDictionary *oneFlight in array) {
if ([normalizedDateWithDate([oneFlight objectForKey:@"flightDate"]) isEqualToDate: normalizedDateWithDate(fDate)])
{
[sectionFlights addObject:oneFlight];
}
}
[datesAndFlights setObject:sectionFlights forKey:normalizedDateWithDate(fDate)];
[sectionFlights release];
}
NSEnumerator *enumerator = [datesAndFlights keyEnumerator];
NSDate *key;
while ((key = [enumerator nextObject])) {
NSLog(@"Key: %@", key);
for (NSDictionary *oneFlight in [datesAndFlights objectForKey:key]) {
NSLog(@"flightNumber: %@ and Total Time: %@", [oneFlight objectForKey:@"flightNumber"], [oneFlight objectForKey:@"totalTime"]);
}
}
[array release];
[flightDates release];
[datesAndFlights release];
[pool drain];
return 0;
}
这正是我已成功地组装起来,似乎可行,但如果任何人都可以看到一个方法,使这更好或更简洁请说出来!另外我用来确保日期的函数总是在时间00:00:00,当我比较它时,我已经在文档中看到NSCalendar - rangeOfUnit:startDate:interval:forDate:方法了吗?更好地使用这个呢?
谢谢