0
我正在使用遊戲中心在兩個玩家之間發送數據。出於某種原因,我不斷收到一個解除分配的實例消息。下面的代碼:發送到釋放Instantce的消息
- (void)sendGameMove:(uint32_t)i andj:(NSString *)j {
MessageMove message;
message.message.messageType = kMessageTypeMove;
message.i = 1;
message.j = @"Testing 1 2 3s";
NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageMove)];
MessageMove * messageMove = (MessageMove *) [data bytes];
NSLog(@"Message I: %i", messageMove->i);
NSLog(@"Message J: %@", messageMove->j);
[self sendData:data];
}
(我在i和j參數填充爲我傳遞了什麼)。在這種方法中的NSLog語句都登錄他們應該怎樣創建NSData對象後,但是當我發送的NSData對象的方法[自送出數據:數據]:
- (void)sendData:(NSData *)data {
MessageMove * messageMove = (MessageMove *) [data bytes];
NSLog(@"Message I: %i", messageMove->i);
NSLog(@"Message J: %@", messageMove->j);
NSError *error;
BOOL success = [[GCHelper sharedInstance].match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable error:&error];
if (!success) {
[self matchEnded];
}
}
在聲明NSLog的第一個正常工作,所以我得到:
"Message I: 1"
在控制檯中,但第二日誌語句,我得到:
"*** -[ respondsToSelector:]: message sent to deallocated instance"
分解數據對象的代碼在第二種方法中與第一種方法完全相同。有任何想法嗎?
完美運作!!!!!非常感謝你,我已經有這個問題好幾個星期了,沒有人提供新的答案!你是一個拯救生命的人!!!!!!!!! – 2014-08-31 20:46:41
很高興幫助!另一個建議:我建議切換你的Objective-C代碼,以便用ARC進行編譯。特別是,ARC會檢測到將消息結構中的'NSString *'指針自動存儲爲可能不安全。 – 2014-08-31 22:00:53