sortedArray包含100个对象,需要按“时间”键中的“小时”进行组织。结果是有一个数组数组来填充表的各个部分,并使用小时作为索引。 '时间'的形式 - 2012-05-15 07:20:00
NSInteger d = 0;
NSInteger prevd;
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
detailArray = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < 24; ++i)
[detailArray addObject:[NSNull null]];
for (NSArray *item in sortedArray) {
prevd = d;
d = [[[[item objectAtIndex:0] objectForKey:@"time"] substringWithRange:NSMakeRange(11, 2)] intValue];
if (d > prevd && prevd != 0) {
[detailArray replaceObjectAtIndex:d withObject:tempArray];
[tempArray removeAllObjects];
}
[tempArray addObject:item];
}
对象没有以正确的detailArray帖子结尾或根本没有结束。例如,[detailArray objectAtIndex:6]
给出时间为14(下午2点)的项目。
我错过了什么?
使用第一个答案进行编辑以更正代码。现在是:
NSInteger d = 0;
NSInteger prevd;
NSMutableArray *tempArray = nil;
detailArray = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < 24; ++i)
[detailArray addObject:[NSNull null]];
for (NSArray *item in sortedArray) {
prevd = d;
d = [[[[item objectAtIndex:0] objectForKey:@"time"] substringWithRange:NSMakeRange(11, 2)] intValue];
if (d > prevd) {
tempArray = NSMutableArray array];
[detailArray replaceObjectAtIndex:d withObject:tempArray];
}
[tempArray addObject:item];
}
答案 0 :(得分:3)
你不能像那样重复使用tempArray,你最终会得到包含多个条目的detailArray,这些条目都指向同一个tempArray实例。 (即每个有时间的插槽最终会以最后一个时隙的数组结束)。
而不是
[detailArray replaceObjectAtIndex:d withObject:tempArray];
[tempArray removeAllObjects];
你想要
tempArray = [NSMutableArray array];
[detailArray replaceObjectAtIndex:d withObject:tempArray];
每个时隙都有自己的数组。 并且您还希望将原始的tempArray声明更改为
NSMutableArray *tempArray = nil;