混淆枚举...如何更改枚举过程中的对象?

问题描述:

仍然不熟悉Objective-C和我感到困惑枚举...混淆枚举...如何更改枚举过程中的对象?

比方说,我有8个“车”对象和所有的人的一个NSArray有自己的“paintColor”属性设置为“红色。我想通过数组枚举并设置每个Car.paintColor属性设置为“蓝色”,我该怎么办呢?

for (Car *car in myArray){ 
    car.paintColor = @"blue"; 
} 

不过,如果我做

Car *testCar = [myArray objectAtIndex:2]; 

NSLog(@"The car color for 3rd object in myArray is %@", testCar.color); 

我仍然获得“红”。所以看来枚举只是创建一个临时对象,但不是mod ify数组中包含的实际对象。

什么是正在做我想做的事情?我有很多的情况下我想通过一个数组枚举,但实际上改变在阵列内

感谢

--edit

好的项目,感谢信息..你能解释一下为什么这不起作用?

我有一个名为“carsArray”的NSArray设置为包含三个NSMutable字符串对象(“Buick”,“Bronco”,“Cadillac”)的属性。

我再做

for (NSMutableString *car in myArray) { 
    car = [NSMutableString stringWithFormat:@"test"]; 
} 

NSMutableString *temp = [myArray objectAtIndex:2]; 
NSLog(@"third car is %@", temp); 

的NSLog是说 “凯迪拉克”。它不应该是“测试”吗?

+7

枚举不应该产生临时值。有一件事我注意到,在你调用NSLog的时候你正在读取颜色属性,但在枚举器中你正在设置paintColor属性。它可能是一个简单的类型是搞砸了吗? – Mattia

+0

感谢您的信息。我已经添加了第二个示例,我想知道为什么那个不起作用 – sayguh

做你想做什么:

for (NSMutableString *car in myArray) { 
    [car setString:[NSMutableString stringWithFormat:@"test"]]; 
} 

指针的基本认识。这不是特别枚举,使得它以这种方式工作。

NSMutableString *car1 = [NSMutableString stringWithFormat:@"Cadillac"]; 
NSMutableString *car = car1; 
[car setString:[NSMutableString stringWithFormat:@"Ford"]]; 
NSLog(@"car1 = %@", car1); 

// Ford 

car = [NSMutableString stringWithFormat:@"Buick"]; 
NSLog(@"car1 = %@", car1); 

// Ford 

当您订车= CAR 1,汽车是一个 “别名” 为CAR 1。您可以在汽车上设置属性,并将属性设置在car1上。您可以在汽车上调用像setString这样的方法,该方法将在car1上调用。 car和car1是指针,它们指向相同的对象。

当您将赋值给一个新值给汽车时,它只是使其成为另一个对象的别名,不再是与car1相同的对象。此作业不会影响car1,也不会影响您之后在汽车上使用的任何财产访问者或方法。

该枚举有效地依次执行car = myArray[0],car = myArray[1],car = myArray[2]。 (速记:myArray[0]是不正确的Objective-C语法。)

快速枚举不会复制对象也不会创建临时副本。 NSArray是指向对象的指针的数组。快速枚举只是通过指针列表循环,每次循环都会得到下一个指针。指针指向数组指向的同一个对象。

您在快速枚举循环中更改对象内容的方式没问题。

您的问题在别处(请参阅Mattia的评论)。

+0

我已经添加了一个编辑..你知道那是行不通的吗? – sayguh