NSMutableArray removeAllObjects在删除后用其他项替换内容

时间:2012-05-25 00:06:33

标签: iphone arrays ios5 nsmutablearray

抱歉,如果标题措辞奇怪,不确定如何说出来。我将一个对象数组的内容从一个JSON添加到另一个数组中,所以我可以使用一个分段的UITableView。但是,当我为第一部分填充足够的时间进行removeAllObjects函数调用时,将它们添加到我的数组中,然后开始加载第二部分,这会导致整个第一部分被第二部分替换部分。 NSMutableArray是错误的,还是我没想到的?

    weekScheduleArray = [[NSMutableArray alloc] initWithCapacity:2];
    NSMutableArray *temp = [[NSMutableArray alloc] init];
    for (int count = 0; count < [jsonObject count]; count++) {
        if (count < 7) {
            [temp addObject:[jsonObject objectAtIndex:count]];
        } else if (count == 7) {
            [weekScheduleArray addObject:temp];
            [temp removeAllObjects];
            [temp addObject:[jsonObject objectAtIndex:count]];
        } else {
            [temp addObject:[jsonObject objectAtIndex:count]];
        }
    }
    [weekScheduleArray addObject:temp];

2 个答案:

答案 0 :(得分:1)

致电[weekScheduleArray addObject: temp] temp的副本添加到weekScheduleArray;它添加了数组本身。因此,当您随后removeAllObjects temp时,weekScheduleArray中的数组也为空。您可以通过以下方式避免此问题:

[weekScheduleArray addObject: [temp copy]];

答案 1 :(得分:1)

问题是你正在继续操作刚刚添加到weekScheduleArray中的完全相同的可变数组。有很多方法可以解决这个问题。将它添加到weekScheduleArray时可以创建副本:

[weekScheduleArray addObject:[temp copy]];

或者你可以这样做:

[weekScheduleArray addObject:temp];
[temp release];
temp = [[NSMutableArray alloc] init];
[temp addObject:[jsonObject objectAtIndex:count]];

然后当你完成你的for循环时,记得释放temp。