【发布时间】:2014-08-29 22:53:48
【问题描述】:
我正在使用游戏中心在两个玩家之间发送数据。出于某种原因,我不断收到解除分配的实例消息。代码如下:
- (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 对象发送到方法 [self sendData:data] 时:
- (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"
第二种方法中分解数据对象的代码与第一种方法中的完全相同。有什么想法吗?
【问题讨论】:
标签: ios objective-c ipad methods game-center