Установка объекта при проблемах с быстрым перечислением - PullRequest
0 голосов
/ 08 октября 2011

Примерно день назад я опубликовал этот вопрос: Запутался в перечислении ... Как изменить объекты, которые во время перечисления?

Я узнал, что могу вызывать методы объекта во время перечисления, но если я присваиваю с помощью оператора "=", тогда он создает новый объект ( не то, что я хочу ) .

Связанный вопрос показывает, как использовать setString для массива объектов NSString ... но теперь мой вопрос касается пользовательских объектов

Вот что я хочу сделать

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

Тем не менее, оператор "=" не будет работать для меня ... есть какой-то метод, который я могу использовать, как это?

[car setObject:[self getrandomCar];

Спасибо!

1 Ответ

8 голосов
/ 08 октября 2011

Прежде всего, если вы хотите изменить объект, на который указывает массив, вы должны изменить массив, а не указатель, который дает быстрое перечисление.Во-вторых, вы не можете изменить массив во время быстрого перечисления ( хорошо, вы можете, но это взорвется на вашем лице).Я предлагаю вам сделать копию массива перед перечислением, а затем изменить его во время перечисления, выбрасывая исходный массив после завершения перечисления.Например:

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;

Это не так красиво, как вы могли бы поверить в быстром перечислении, но это то, что нужно сделать, если вы хотите изменить массив при перечислении через него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...