2013-12-10 4 views
-1

Я создаю игру в Cocos2D 2, но моя проблема связана с NSArray/NSMutableArray.непризнанный селектор, отправленный экземпляру NSArray/NSMutableArray

Класс, называемый SocketManager, который управляет классом сокетов, который является производным от CCSprite. У Socket есть только дополнительная переменная-член, называемая строкой, которая является int. SocketManager хранит массив со всеми спрайтами Sockets, которые находятся в игре.

В классе игры у меня есть этот код, чтобы добавить сокеты менеджеру:

for (int i = 1; i <= numRows; i++) { 

    for (int j = 1; j <= i; j++) { 

     Socket *socket =[Socket spriteWithFile:@"Tile_Socket.png"]; 


     socket.row = i;    
     socket.anchorPoint = ccp(0.5, 0.5); 

     /* Shortend to cut out useless code */ 

     [socketsManager addSocket:socket]; 
     [self addChild:socket]; 

    } 
    } 

Это SocketsManger добавить функцию:

-(void)addSocket:(CCSprite *)socket { 

[sockets addObject:sockets]; 
} 

Позже в игре в функции обновления он проверяет, хочет ли строка изменить и вызывает функцию SocketManager:

-(NSArray *)searchSocketByRow:(int)row; { 

NSMutableArray *array = [[NSMutableArray alloc] init]; 

for (Socket *socket in sockets) 
    CCLOG(@"Row: %i", socket.row); 
    // if ([socket row] == row) 
    // [array addObject:socket]; 

    // CCLOG(@"Found %i sockets.", [array count]); 
    // return [NSArray arrayWithArray:[array mutableCopy]]; 
    } 

Когда я пытаюсь вызвать socket.row или [строку сокета] Я получаю ошибку:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM row]: unrecognized selector sent to instance 

ответ

2

Этот метод выглядит неверно попробуйте изменить его на:

-(void)addSocket:(CCSprite *)socket { 

[sockets addObject:socket]; 
} 

Вы пытаетесь добавить массив в массив, но хотите добавить объект CCSprite. Это должно помочь.

+0

Wow я пропустил это. Благодаря! – Marquisk2

1

Try

[sockets addObject:socket]; 

без с на объект, который вы хотите добавить

2

У вас есть дополнительный S в смеси. В функции добавить сокет изменить

[sockets addObject:sockets]; 

в

[sockets addObject:socket]; 
Смежные вопросы