Пара вещей.
**Code used in ParticleEmitter.m**
newlevelsArray = [NSMutableArray array];
newlevelsArray=view.levelsArray;
Первая строка создает новый массив.Во 2-й строке присваивается newlevelsArray, который будет указателем на массив в view.levelsArray, оставляя объект, созданный в строке # 1, сиротами.
Я думаю, что вы намеревались, чтобы 2-я строка была полевой копией массива, но назначения объектов не работают таким образом.
Это можно исправить двумя способами.
1) Удалите первую строку newlevelsArray = [NSMutableArray array];
2) Измените вторую строку на `newlevelsArray = [view.levelsArray copy];
Это будетна самом деле сделайте копию, что, вероятно, вам и нужно, так как вы можете затем изменить и изменить newlevelsArray в ParticleEmitter.m без изменения значения в представлении.
Важное примечание: не забудьтесоздать -dealloc: метод в вашем классе эмиттера частиц, который выпускает newlevelsArray:
-(void)dealloc {
if (newlevelsArray) [newlevelsArray release];
[super dealloc];
}
Альтернативное решение - использовать сеттеры.
Вместо:
2) Измените 2-ю строку на newlevelsArray = [view.levelsArray copy];
Do:
2) Измените 2-ю строку на this.newlevelsArray = view.levelsArray;
Где вы должны определить newlevelsArrayбыть свойством класса ParticleEmitter иsing
@property (copy) NSMutableArray * newlevelsArray;
Обратите внимание на использование «copy» вместо «retain».Это сделает копию поля массивом, что, скорее всего, рекомендуется для контейнеров изменяемых объектов.