2011-07-03 4 views
0

좋아, 그래서 "게임"라는 클래스 개체 코드가 있습니다. 모든 프레임 (60FPS)은 해당 객체를 문자열을 가져 오는 함수로 업데이트합니다. 5 초 동안 게임을 실행 한 후 인식 할 수없는 셀렉터가 인스턴스 오류로 전송됩니다.인스턴스로 전송 된 인식 할 수없는 선택기 - 이유는 무엇입니까?

업데이트 :

[game updatePlayersAndMonsters:@"0" monsters:@"0"]; 

기능 :

-(void)updatePlayersAndMonsters:(NSString*)players monsters:(NSString*)monsters { 
    CCLOG(@"%@.%@", players, monsters); 
} 

내가 무슨 일이 일어나고 있는지 이해가 안 돼요. 오류 :

2011-07-03 12:13:19.175 app[65708:207] -[NSCFString updatePlayersAndMonsters:monsters:]: unrecognized selector sent to instance 0xc4e95b0 
2011-07-03 12:13:19.176 app[65708:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString updatePlayersAndMonsters:monsters:]: unrecognized selector sent to instance 0xc4e95b0' 

어떻게해야합니까? 감사. 또한 IDK가 필요한 다른 세부 정보가 있으면, 내가 잊어 버린 것만 쓰면 그냥 생각이 없습니다.

UPDATE :

+(id) GmameNodeWithMapID:(int)MapID_ scene:(SomeScene*)MainScene_ players:(NSString*)Cplayers_ monsters:(NSString*)Cmonsters_ monsterCount:(NSString*)monsterCount_ 
{ 
    return [[[self alloc] GmameNodeWithMapID:MapID_ scene:MainScene_ players:Cplayers_ monsters:Cmonsters_ monsterCount:monsterCount_] autorelease]; 
} 
-(id) GmameNodeWithMapID:(int)MapID scene:(SomeScene*)MainScene players:(NSString*)Cplayers monsters:(NSString*)Cmonsters monsterCount:(NSString*)monsterCount 
{ 
    if((self=[super init])) { 

내가 그것을 만들 :

+(id) scene { 
    CCScene *s = [CCScene node]; 
    id node = [SomeScene node]; 
    [s addChild:node]; 
    return s; 
} 
-(id) init { 
    if((self=[super init])) { 
:

game = [GameNode GmameNodeWithMapID:ChoosenMapID scene:self players:Thing[5] monsters:Thing[6] monsterCount:Thing[4]]; 

업데이트 2

내가 SomeScene을 만들 Gmae이 클래스 GameNode의 목적은

나는 그것을 사용 :

[[CCDirector sharedDirector] replaceScene: [CCTransitionRadialCW transitionWithDuration:1.0f scene:[LoginScene scene]]]; 

답변

2

'NSInvalidArgumentException', reason: '-[NSCFString updatePlayersAndMonsters:monsters:]: 당신이 String 객체에 updatePlayersAndMonsters를 보내려고 THT을 의미한다. game을 다른 것을 가리 키도록 재 할당 하시겠습니까?

+0

확인을 ... 흠 그렇게하지 내가 멍청한 것에 대해 유감스럽게 생각합니다. 다른 곳을 가리 키도록 다시 지정한다는 것은 무엇을 의미합니까? 감사! –

+0

이런 종류의 오류를 발생시키는 데는 몇 가지 방법이 있습니다. 한 가지 방법은 다음과 같이 무언가를 indadvertedly하고 있습니다 :'game = '. 또 다른 방법은 (아마 가장 최근의 업데이트가 주어 졌을 때), 게임 객체가 릴리즈되었고, 게임 객체를 담았던 메모리 위치가 이제 다른 것을 포함하고 있다는 것입니다. – jjwchoy

+0

xcode의 도구 도구는 이런 종류의 디버깅에 정말로 유용합니다. 시뮬레이터에서 실행할 수 있다면 좀비 도구로 실행 해보십시오. 이 도구는 출시 된 개체에 메시지를 보낼 때 알려주며, 할당량/보유/릴리스/자동 회수를 모두 표시하여 과도하게 공개 된 (또는 보존되지 않은) 위치를 찾을 수 있도록 도와줍니다 – jjwchoy

3

게임의 처음 5 초 동안 업데이트 기능 [game updatePlayersAndMonsters:@"0" monsters:@"0"];이 호출되었다는 것을 암시 했으므로 오류가 발생한다고 생각하기 때문에 game 개체가 올바르게 유지되지 않아서 할당이 해제되고 연속적으로 시도됩니다. NSString 객체가 메모리를 재사용하고 있기 때문에 메시지를 보내는 데 실패합니다 (셀렉터는 updatePlayersAndMonsters:monsters이 아닙니다).

어떻게하면 game이 생성되었는지 (alloc/init)와 어떻게 저장되어 수업에 도움이되는지 알려주세요.

NSZombies 추적 기능을 활성화하면이를 진단하는 데 도움이 될 수 있습니다.

편집 :

game = [GameNode GmameNodeWithMapID:ChoosenMapID scene:self players:Thing[5] monsters:Thing[6] monsterCount:Thing[4]]; 

로컬 변수 또는 GameNode 오토 릴리즈에 바르 중 하나를 설정하는 : 당신이 코드

를 추가 한 후이 라인에 나에게 보인다.

이제 속성을 사용하고 있지 않으며 자동 완성 된 GameNode에 대한 보존이 보이지 않으므로 내 가설이 확인 된 것으로 보입니다.

self.game = [GameNode ...]; 

있는 게임으로 선언 : 중 하나 유지 속성에 할당

@property (nonatomic, retain)... 

또는 않는 자신을 유지 : 정말 이상한

game = [[GameNode GmameNodeWithMapID:ChoosenMapID scene:self players:Thing[5] monsters:Thing[6] monsterCount:Thing[4]] retain]; 
+0

업데이트 됨. 감사. –

+0

나는 좀비들과 노력하고있다. 그러나 충돌 할 때마다 그 물건이나 아무것도 보여주지 않는다. .. 이상하다. 나는 Xcode 4> Product> profile> 좀비를 사용하고있다. 그것은 항상 작동하지만 지금은 단지 간단한 충돌과 아무것도 더 .. –

+0

좋아, 그럼에도 불구하고 autorelease 유지를 추가 할 수 있습니까? 또한 때로는 게임 객체를 제거하고 새 객체를 만들어야하므로 retain과 정확히 동일합니까? 감사!! –

관련 문제