2013-06-28 41 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

看起來像內存管理問題。你有沒有嘗試在'Instruments'中使用'Zombies'選項? –

+0

殭屍不會顯示任何東西,只有EXC_BAD_ACCESS .. –

回答

0

我認爲這可能會導致問題。

我這樣定義消息體;

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

我想xCode不允許我在struct中定義「id」類型的變量。所以我不能將ID類型發送到其他設備。沒有解決方案,我必須找到另一種方法來找出它是哪種卡。

謝謝。