NSMutalbeArray addobject但覆盖以前的对象

时间:2013-06-13 05:22:00

标签: nsmutablearray overwrite

当前数组就像

(a, b, c),

需要改变他们的顺序,比如(b,c,a)和(c,a,b),然后将它们添加到一个新数组,最终目标是得到一个类似

的数组
(( a, b, c,), (b, c, a), (c, a, b)) 

代码如下:

NSMutableArray * now = [[NSMutableArray alloc] initWithObjects:@"a", @"b", @"c", nil];
NSMutableArray * new = [[NSMutableArray alloc] init];
[new addObject:now];
NSLog(@"...new0: %@", new);

int n, i;
for (n = 0; n < 2; n ++) {
    for (i = 0; i < [now count] - 1; i ++) {
        [now exchangeObjectAtIndex:i withObjectAtIndex:i+1];
    }
    [new addObject:now];
}
NSLog(@"...new1: %@", new);

但是,最终的new1结果是(c,a,b)覆盖了以前的结果!我的代码出了什么问题?

...new1: (
    (
    c,
    a,
    b
),
    (
    c,
    a,
    b
),
    (
    c,
    a,
    b
)

1 个答案:

答案 0 :(得分:0)

问题是您现在使用相同的阵列进行更改。 这导致更改现在存储在new中的先前值。 这可以通过添加现在的副本来解决,如下所示

NSMutableArray * now = [[NSMutableArray alloc] initWithObjects:@"a", @"b", @"c", nil];
    NSMutableArray * new = [[NSMutableArray alloc] init];
    [new addObject:[now copy]];
    NSLog(@"...new0: %@", new);

    int n, i;
    for (n = 0; n < 2; n ++) {
        for (i = 0; i < [now count] - 1; i ++) {
            [now exchangeObjectAtIndex:i withObjectAtIndex:i+1];
        }
        [new addObject:[now copy]];
    }
    NSLog(@"...new1: %@", new);