与游戏中心一起发送数据时EXC_BAD_ACCESS

时间:2013-06-28 07:11:03

标签: ios message nsdata exc-bad-access gamekit

我正在尝试与游戏中心进行多人记忆游戏。

我按照this链接中的教程,将两个设备连接到一个匹配项,开始匹配。

在游戏中,当一个设备翻转一张卡时,另一个设备也必须翻转该卡。为此,我必须将id类型值发送到另一个设备,这样我就可以在两个设备中翻转该卡。 / p>

这是代码;

- (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错误,应用程序崩溃了。

我知道这是一个复杂的东西,有人有想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为这可能会导致问题。

我像这样定义消息体;

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

我想xCode不允许我在struct中定义“id”类型变量。所以我不能将id类型发送到其他设备。没有解决方案,我必须找到另一种方法来找出它是哪个卡。

谢谢。