iPhone - Изменение массива во время его перечисления - PullRequest
0 голосов
/ 15 октября 2011

У меня есть изменяемый массив, который содержит воспроизводимые звуки.

У меня есть непрерывный процесс, который анализирует этот массив для настройки громкости и некоторых других вещей.

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

Как я могу решить эту проблему?

Ответы [ 2 ]

1 голос
/ 15 октября 2011

Было бы неплохо увидеть любой код здесь.Но в соответствии с тем, что вы говорите, я думаю, что проблема заключается в способе, которым вы используете для перебора массива.Я думаю, это выглядит так:

for ( type *object in myArray) {
    ...
}

Теперь, как говорит ваше исключение, вы не можете изменять массив при этом.Если вы, с другой стороны, обращаетесь к значениям массива через индексы, он должен работать:

for (int i = 0; i < myArray.count; i++) {
    [myArray objectAtIndex:i]...
}   

Имейте в виду, однако, что индексы не являются "стабильными" в этом смысле, особенно если вы удалитеобъекты.

1 голос
/ 15 октября 2011

Вы не можете легко изменить массив, пока он перечисляет.

Перечислите через массив и запишите новый добавляемый звук (используя переменную или отдельный массив, если вам нужно отметить более одного). Когда перечисление закончено, добавьте звук в массив.

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

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