在快速枚举问题期间设置对象

say*_*guh 0 objective-c

大约一天前我发布了这个问题:对枚举感到困惑......如何在枚举期间更改对象?

我了解到我可以在枚举期间调用对象上的方法,但是如果我使用"="运算符进行分配,那么它会创建一个新对象(不是我想要的).

链接的问题显示了如何在NSString对象的数组上使用setString ...但现在我的问题是自定义对象

这就是我想要做的

for (Car * car in self.carsArray)
{
    if (car.name == nil){
      car = [self getrandomCar];         
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,"="运算符对我不起作用...是否有某种类型的方法可以像这样使用?

[car setObject:[self getrandomCar];
Run Code Online (Sandbox Code Playgroud)

谢谢!

hat*_*rby 8

首先,如果要更改数组中指向的对象,则必须更改数组,而不是快速枚举为您提供的指针.其次,你不能在快速枚举期间更改阵列(好吧,你可以,但在你脸上爆炸).我建议你在枚举之前复制一个数组,然后在枚举期间修改它,在枚举完成后丢弃原始数组.例如:

tempArray = [self.carsArray mutableCopy];

for (Car * car in self.carsArray)
{
    if (car.name == nil){
      [tempArray replaceObjectAtIndex:[self.carsArray indexOfObject:car] withObject:[self getrandomCar]];
    }
}

[self.carsArray release];
self.carsArray = [tempArray copy];
[tempArray release];
tempArray = nil;
Run Code Online (Sandbox Code Playgroud)

它并不像你想要的快速枚举那么漂亮,但是如果你想通过枚举来改变数组就必须要做的事情.