Извлечение объекта класса из NSArray и добавление к себе - PullRequest
0 голосов
/ 22 апреля 2011

Привет, я пытаюсь получить объект определенного класса из NSMutableArray, а затем добавить его к себе: например:

- (void) init{
     _Objects = [[NSMutableArray alloc]init];
     Psychicing *psy = [[Psychicing alloc]init];
     [psy startPsychic];
     [_Objects addObject: psy];
     [psy release];
}

Это создает объект класса Psychicing, затем запускает [psy startPsychic] метод для создания внутренних объектов объекта класса.Затем я добавляю объект psy в _Objects NSMutableArray.

-(void)startPsychic{
      id psychicParticle = [CCParticleSystemQuad ......]; //is Synthesised with (assign)
      //Other things are set here such as position, gravity, speed etc...
}

Когда на экране обнаруживается касание, я хочу взять объект psy из массива _Objects и добавить его к себе: что-то вроде этого (хотя это дает ошибку времени выполнения)

-(void) Touches.....{

     for (Psychicing *psy in _Objects){
          [self addChild: psy.psychicParticle];
     }
}

Надеюсь, я объяснил это достаточно четко, если вам нужно больше разъяснений, дайте мне знать.
В общем:
[MainClass Init] -> [Psychicing startPsychic] -> [MainClass add to array] ->[MainClass добавить к себе]

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

Я предполагаю, что _Objects (который должен быть в нижнем регистре o, чтобы следовать соглашениям) хранит объекты, отличные от объекта Psychicing, и вы пытаетесь извлечь из него только объект Psychicing в - (void) Touches. .. метод (который также должен быть в нижнем регистре). Если это так, вы можете сделать:

for (id obj in _Objects)
{
  if ([obj isMemberOfClass:[Psychicing class]])
    [self addChild:obj.psychicParticle];
}

Это приведет к тому, что только объекты Psychicing в массиве будут добавлены к себе как дочерние.

Похоже, у вас есть еще одна ошибка, хотя код, который вы вставили, является вашим реальным кодом. Init должен быть определен как:

- (void) init{
     _Objects = [[NSMutableArray alloc]init];
     Psychicing *psy = [[Psychicing alloc]init];
     [psy startPsychic];
     [_Objects addObject: psy];
     [psy release];
}

с _Objects, определенными как переменная экземпляра (или свойство) в интерфейсе класса. Как вы уже написали, это переменная метода в методе init, и она протекает. Поэтому, когда вы пытаетесь получить доступ к _Objects в -touches, _Objects, скорее всего, равен нулю.

0 голосов
/ 22 апреля 2011

Хорошо, с помощью McCygnus я все заработал, единственное, чего не хватает с указателем на объект id:

 for (id obj in _Objects){
        if ([obj isMemberOfClass:[Psychicing class]]){
            Psychicing *apsy = obj;
            [apsy.psychicParticle setPosition:location];
            [self addChild:apsy.psychicParticle];
        }

    }
...