2013-06-28 3 views
0

게임 센터가있는 멀티 플레이어 메모리 게임을 만들려고합니다.게임 센터에서 데이터를 보내는 중 EXC_BAD_ACCESS

나는 this 링크의 튜토리얼을 따라 두 장치를 연결하여 경기를 시작했습니다.

게임에서 한 장치가 카드를 뒤집을 때 다른 장치가 카드를 뒤집어야합니다. 이렇게하려면 다른 장치에 ID 형식 값을 보내야하므로 두 장치에서 카드를 뒤집을 수 있습니다.

다음은 코드입니다.

- (void)gameTouchBegin:(id)target { 
    [target flipTheCard]; 
    [self sendCardMove:target]; 
} 

- (void)sendCardMove:(id)target { 
    MessageCard message; 
    message.message.messageType = kMessageTypeCard; 
    message.target = target; 
    NSData* data = [NSData dataWithBytes:&message length:sizeof(MessageCard)]; 
    [self sendData:data]; 
} 

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID { 
    if (message->messageType == kMessageTypeCard) { 
    NSLog(@"Other player flipped the card."); 
    // I can successfully write this line. 
    // So I can reach inside this function. 
    MessageCard * messageInit = (MessageCard *) [data bytes]; 
    id gTarget = (id)messageInit->target; 
    [gTarget flipTheCard]; 

    // At the three code lines above, I got an error. 

    } 
} 

코드 끝 부분에 주석을 달았으므로 EXC_BAD_ACCESS 오류가 발생하고 앱이 다운됩니다.

나는 이것이 복잡한 것임을 알고 있으며, 누구나 아이디어가 있습니까?

미리 감사드립니다.

+0

메모리 관리 문제처럼 보입니다. '악기 '에서'좀비'옵션을 사용해 보셨습니까? –

+0

좀비는 아무것도 표시하지 않고 EXC_BAD_ACCESS 만 표시합니다. –

답변

0

문제가 발생할 수 있습니다.

다음과 같이 메시지 본문을 정의합니다.

typedef struct { 
    Message message; 
    id target; 
} MessageCard; 

xCode를 사용하면 struct에 "id"유형 변수를 정의 할 수 없습니다. 그래서 다른 장치에 ID 유형을 보낼 수 없습니다. 그에 대한 해결책은 없으며, 어떤 카드인지 알아 내려면 다른 방법을 찾아야합니다.

감사합니다.

관련 문제