我有一個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:方法了嗎?更好地使用這個呢?
謝謝