如何将数组对象输入NSMutableArray?

时间:2012-05-16 02:54:26

标签: objective-c ios nsmutablearray

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];
}

1 个答案:

答案 0 :(得分:3)

你不能像那样重复使用tempArray,你最终会得到包含多个条目的detailArray,这些条目都指向同一个tempArray实例。 (即每个有时间的插槽最终会以最后一个时隙的数组结束)。

而不是

[detailArray replaceObjectAtIndex:d withObject:tempArray];
[tempArray removeAllObjects];

你想要

tempArray = [NSMutableArray array];
[detailArray replaceObjectAtIndex:d withObject:tempArray];

每个时隙都有自己的数组。 并且您还希望将原始的tempArray声明更改为

NSMutableArray *tempArray = nil;