我想将对象的数组存储在可变的字典中,但它好像字典丢失了我的一些数组(或者也许数组正在丢失数据?)。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