大约一天前,我发布了这个问题: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];
谢谢!
答案 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;
它并不像你想要的快速枚举那么漂亮,但是如果你想在枚举它时改变数组就必须要做的事情。