オブジェクトの配列を可変ディクショナリに格納しようとしていますが、ディクショナリが配列の一部を失っているようです (または、配列がデータを失っているのでしょうか?)。
とにかく、ここにいる:
- (NSDictionary *)getTicketsByDay:(NSArray *)tickets {
// take an array of tickets and return a dictionary with dates (given by
// NSDateFormatterShortStyle) as keys and arrays of tickets as the values
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterShortStyle];
// get NSDate object without time (only month, day, year)
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSMutableDictionary *datesDict = [[NSMutableDictionary alloc] init];
for (Ticket *ticket in tickets) {
NSDateComponents *ticketDateNoTimeComponents = [calendar components:flags fromDate:[ticket createdAt]];
NSDate *ticketDateNoTime = [calendar dateFromComponents:ticketDateNoTimeComponents];
NSString *dateString = [formatter stringFromDate:ticketDateNoTime];
NSMutableArray *ticketArray = [datesDict objectForKey:dateString];
NSLog(@"%lu", [ticketArray count]);
if (ticketArray == nil) {
NSLog(@"it's here: %@", dateString);
ticketArray = [[NSMutableArray alloc] init];
}
[ticketArray addObject:ticket];
NSLog(@"%lu", [ticketArray count]);
[datesDict setObject:ticketArray forKey:dateString];
}
return datesDict;
}
しかし、コンソールでは、ランダムな場所で(毎回同じ場所ですが)、次のような結果が得られます
41
41
42
0
it's here: 6/29/12
1
以前のオブジェクトのキーも「6/29/12」でしたが。また、辞書のすべてのキーを出力しましたが、1つしかありません。
そのため、どこかでデータが失われています。どうしたの?
また、私は 10.7.4 で ARC を使用していることにも言及する必要があります。