2014-06-11 2 views
0

배열에서 임의의 스프라이트 노드를 선택하여 화면에 배치하는 방법이 있습니다. 내 응용 프로그램이 충돌합니다.NSArray로 인해 앱이 다운 될 수 있습니까?

* 인해 캐치되지 않는 예외 'NSInvalidArgumentException'응용 프로그램 종료, 이유는 :이 오류 메시지에서 조각입니다 '- [__ NSCFConstantString decodeObjectForKey :] : 인식 할 수없는 선택기 인스턴스 0x47b4로 전송'

이것은 내가 작성한 방법입니다.

-(SKSpriteNode *) gamePieces { 

NSArray *things = [NSArray arrayWithObjects: @"piece1", @"piece2", @"piece3", nil]; 

int r = arc4random() % [things count]; 

SKSpriteNode *randomObject = [[SKSpriteNode alloc] initWithCoder:[things objectAtIndex:r]]; 



return randomObject; 
} 

문제는 무엇입니까?

+4

"decodeObjectForKey를 NSString에 적용하면 작동하지 않습니다." –

+0

이 문제를 해결하려면 어떻게해야합니까? – cocoamoco

+0

먼저 예외 스택 추적을 캡처하고 해석하여 오류 위치를 파악할 수 있습니다 실제로 왜 "decodeObjectForKey"(이것은 NSArray 또는 NSDictionary에서'[]'색인을 사용하여 색인을 생성하는 연산)이 NSString (NSArray 또는 NSString) –

답변

0

@HotLicks 및 @ LearnCocos2d에서 이미 언급했듯이 -initWithCoder:이 여기에 적합하지 않습니다. 처음부터 새로운 SKSpriteNode를 생성하는 것은 지정된 이니셜 라이저 (+spriteNodeWithColor:size:, +spriteNodeWithImageNamed: 또는 spriteNodeWithTexture:) 중 하나를 사용하여 수행됩니다. 무작위 이미지로 SKSpriteNode를 만들고 싶다면 다음 코드를 살펴보십시오.

- (SKSpriteNode *) randomGamePiece { 
    NSArray *filename = [NSArray arrayWithObjects: @"piece1", @"piece2", @"piece3", nil]; 
    int r = arc4random() % [things count]; 

    NSString * randomFilename = [things objectAtIndex:r]; 
    SKSpriteNode *randomObject = [SKSpriteNode spriteWithImageNamed:randomFilename]; 

    return randomObject; 
} 

나는 진심으로 새로운 중간 스프라이트 키트 프로그래머를위한 많은 유용한 조각 및 포인터를 포함하는 Sprite Kit Programming Guide을 탐색하는 것이 좋습니다.

관련 문제