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