arrayWithArray不重置值

时间:2014-06-08 16:49:34

标签: objective-c

我目前正在开发一款基于磁贴的游戏,其中包含Xcode中的数字。在我的方法checkGameOver中,每个磁贴都会移动到每个可能的组合,并检查它们是否有效移动。但是,由于该方法更改了名为' values'的可变数组,我认为避免这种情况的最简单方法就是只复制一个'值,并将其存储到' 39; originalValues'然后恢复它。但是,它似乎确实无法改变。我也试过使用副本。我不明白为什么它不起作用。是不是checkGameOver真的是因为成千上万的计算,并且在值被改变之后它还没有完成?

    NSArray *originalValues = [NSMutableArray arrayWithArray:values];
    [self checkGameOver];
    values = [NSMutableArray arrayWithArray:originalValues];

说明:我有数组A(值),我创建了该数组的副本,B(originalValues)。我对A进行了更改,但更改也反映在B中。

1 个答案:

答案 0 :(得分:1)

如果要制作NSArray的深层副本,则需要使用存档。请参阅以下示例:

NSMutableArray *values = [@[@"one", @"two"] mutableCopy];
NSData *originalValues = [NSKeyedArchiver archivedDataWithRootObject:values];

[values replaceObjectAtIndex:1 withObject:@"something"];
NSLog(@"changed: %@", values);
values = [NSKeyedUnarchiver unarchiveObjectWithData:originalValues];
NSLog(@"restored: %@", values);