我有一个包含NSDictionary数组的plist,它代表某个事件,每个字典包含一些关于事件的信息和一个带有事件日期的NSDate,例如。
我希望创建一个带有此日期的分段表格视图,就像点击“列表”视图时随iPhone附带的日历应用程序一样。您可以看到只有有事件发生日期的部分。
那么最好的方法是找出有多少NSDictionary具有相同日期(因此我知道要创建多少部分以及每个部分中有多少行,因为每个部分将有不同的数量或行)。
由于
答案 0 :(得分:2)
我为Reconnected做了类似的事情,除了我的部分多年(参见历史截图)。
在第5步结束时,您应该有一个部分数组。从该部分,您可以向您发送一条消息,其中包含您已添加到表格中的NSDictionary的数量,该部分将代表表格中的每一行。
答案 1 :(得分:0)
经过一段时间的游戏,这就是我想出来的,目前它只是一个基础工具,以保持清晰。
#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:文档中的方法有人知道它是否是更好地使用它?
由于