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

时间:2011-10-07 23:55:12

标签: objective-c

大约一天前,我发布了这个问题:Confused about enumeration... How do I change the objects that during enumeration?

我了解到我可以在枚举期间调用对象上的方法,但是如果我使用“=”运算符赋值,那么它会创建一个新对象(不是我想要的 >)。

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

这就是我想要做的事情

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

但是,“=”运算符对我不起作用......我可以使用某种类型的方法吗?

[car setObject:[self getrandomCar];

谢谢!

1 个答案:

答案 0 :(得分: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;

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