我想將對象的數組存儲在可變的字典中,但它好像字典丟失了我的一些數組(或者也許數組正在丟失數據?)。NSMutableDictionary丟失對象
不管怎麼說,這裏是我在哪裏:
- (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。
「丟失我的數據」是什麼意思?輸出看起來像我期望的代碼。 – 2012-07-06 23:03:05
順便說一句,在後續的迭代中你不需要使用'[datesDict setObject:]' - 你已經在原地改變了數組,所以你現在只是在旋轉CPU週期。 – 2012-07-06 23:03:59
@ConradShultz對不起,我應該澄清。之前的對象也有一個「6/29/12」的日期,所以它們應該在同一個數組中,但它重置爲0.然後,如果我打印出字典中的所有關鍵字,那麼只有一個鍵。我編輯了我的問題來反映這一點。 – 2012-07-06 23:08:39