0

对不起,如果标题措辞奇怪,不知道该怎么说。我正在将 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];
4

2 回答 2

1

调用[weekScheduleArray addObject: temp] 不会temp添加to的副本weekScheduleArray;它添加了数组本身。因此,当您随后removeAllObjects从那时temp起数组中weekScheduleArray也是空的。您可以通过以下方式避免该问题:

[weekScheduleArray addObject: [temp copy]];
于 2012-05-25T00:31:12.993 回答
1

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

[weekScheduleArray addObject:[temp copy]];

或者你可以这样做:

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

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

于 2012-05-25T00:33:21.047 回答