我尝试将新对象添加到我的nsmutablearray中,但每次都替换所有对象
-(void)addToStack:(Coordinate *)coord{
Coordinate*c = [[Coordinate alloc] init];
c.x=coord.x;
c.y = coord.y;
if (coord.x==0 && coord.y==0) {
c.x=coord.x+1;
[_stack addObject:c];
c.x=coord.x;
c.y=coord.y+1;
[_stack addObject:c];
c.y=coord.y;
}
}
答案 0 :(得分:1)
您没有添加新对象,但您正在更改引用保持不变的旧对象。
NSMutableArray addObject
不会添加它,因为它已存在于数组中。
因此,在尝试添加新对象时,首先要创建要更改的对象的副本,如下所示:
Coordinate *newCoordinate = [Coordinate mutableCopy];
// change attributes
// add it to the array
答案 1 :(得分:0)
每个人都说两次添加同一个对象会删除第一个实例并替换它,这是错误的。
数组可以包含对同一对象的重复引用。但是,它更像是在rolodex中保存相同的街道地址两次。如果你在第一个条目中查找地址,请打破那个房子里的所有窗口,然后返回,在rolodex的第二个插槽中查找地址,然后开车到那个地址,你就找到了房子破窗户(因为两个地址都指向同一所房子。)
类似地,当您将相同的对象添加到数组两次时,它是指向同一对象的两个指针。当您在索引0处更改对象的值时,您会看到索引1中对象中反映的那些更改,因为它是指向同一对象的第二个指针。
尽管对代码出了什么问题说错了,@ Shashi3456643为您提供了正确的解决方案,即为数组中的每个条目创建一个新的唯一对象。
答案 2 :(得分:0)
确保启动数组:
NSMutableArray * stack = [[NSMutableArray alloc] init];
答案 3 :(得分:-1)
这是因为每次启动数组时都是如此。初始化数组一次。
例如:
in .h
Coordinate*c;
在.m 中
- (void)viewDidLoad
{
c = [[Coordinate alloc] init];
}
-(void)addToStack:(Coordinate *)coord{
c.x=coord.x;
c.y = coord.y;
if (coord.x==0 && coord.y==0) {
c.x=coord.x+1;
[_stack addObject:c];
c.x=coord.x;
c.y=coord.y+1;
[_stack addObject:c];
c.y=coord.y;
}
}