Передача данных в массиве из одного класса в другой - PullRequest
2 голосов
/ 11 марта 2011

в надежде получить совет по чему-либо.

У меня есть класс Levels Engine, который создает NSMutable Array с именем levelsArray.

Я передаю данные в контроллер уровня, который работает нормально.

У меня также есть класс Particle Emitter, в который я надеюсь передать данные уровня.

Однако мне постоянно говорят, что уровень счетчика массива равен 0, когда я передаю его в класс Particle Emitter.

Массив настроен правильно:

    **LevelsEngine.h**  
    @interface
    LevelsEngine : NSObject {   
    NSMutableArray *levelsArray;         }

    @property (retain) NSMutableArray
    *levelsArray;  




    **LevelsEngine.m**  
    @synthesize levelsArray;  
    LevelsArray =[NSMutableArray array];


    **Code used in ParticleEmitter.m**   
    newlevelsArray = [NSMutableArray array];  
    newlevelsArray=view.levelsArray;

Правильно ли я считаю, что у меня возникает эта ошибка, потому что я пытаюсь передать данные массива из одного объекта NSO в другой, а не в контроллер представления? Если да, то как я могу передать данные?

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Пара вещей.

    **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».Это сделает копию поля массивом, что, скорее всего, рекомендуется для контейнеров изменяемых объектов.

0 голосов
/ 11 марта 2011

Вам нужно изменить код,

вызовите newlevelarray в вызовах LevelsEngine.h.

и ваш код должен выглядеть как

Classobject.newlevelsArray = [nsarray arraywitharray: LevlesArray];

Это должно решить вашу проблему.

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