gpt4 book ai didi

objective-c - 通过 Game Center 发送 NSString

转载 作者:行者123 更新时间:2023-11-28 23:03:52 25 4
gpt4 key购买 nike

我想通过 Gamecenter 将 NSString 从另一个发送到另一个 iPhone/iPad但它因 EXC_BAD_ACCESS 而崩溃

这里是.h文件

typedef enum {
kMessageTypeRandomNumber = 0,
kMessageTypeGameBegin,
kMessageTypeSubmit,
kMessageTypeExchange,
kMessageTypePickup,
kMessageTypePass,
kMessageTypeGameOver
} MessageType;

typedef struct {
MessageType messageType;
} Message;

typedef struct {
Message message;
NSString *submitTile;
} MessageSubmit;

这里是.m文件

- (void)sendData:(NSData *)data {
NSError *error;
BOOL success = [[GCHelper sharedInstance].match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable error:&error];
if (!success) {
CCLOG(@"Error sending init packet");
[self matchEnded];
}
}
-(void)sendSubmit:(NSString *) submitTile {
MessageSubmit message;
message.message.messageType = kMessageTypeSubmit;
message.submitTile = submitTile;
NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageSubmit)];
[self sendData:data];
}

如果我点击 CCMenu 图片,它会调用 onSubmit 函数这里是 onSubmit 函数

-(void)onSubmit
{
NSString *submitStr = @"1-7-7 =-7-8 1-7-9";

[self sendSubmit:submitStr];
}

最后一个是didReceiveData方法

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID {
if (message->messageType == kMessageTypeSubmit) {
MessageSubmit * messageSubmit = (MessageSubmit *) [data bytes];
NSString *submitStr = messageSubmit->submitTile;

NSLog(@"SubTile %@",submitStr);
}
}

它在行 NSString *submitStr = messageSubmit->submitTile; 上有 EXC_BAD_ACCESS。

有什么方法可以通过 iPhone/iPad 发送 NSString 消息吗?

最佳答案

你不能这样做:

NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageSubmit)];    

...或者这个:

MessageSubmit * messageSubmit = (MessageSubmit *) [data bytes];

一般来说,您不能只按原样发送对象在内存中的表示形式。例如,该类的 submitTile 实例变量是指向 NSString 对象的指针。当您通过网络发送数据时,您并不是在发送字符串本身,而是在发送指针——它只是发送设备上一 block 内存的内存地址。接收设备不会在任何地方存储相同的字符串,即使有,也不会有相同的内存地址。所以你有一个无意义的指针指向任何地方,你期望它指向一个不存在的字符串。

做您想做的事情的最简单方法是使您的 MessageSubmitNSCoding 兼容。将其序列化为 NSData 而不是仅仅复制字节。

关于objective-c - 通过 Game Center 发送 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9621898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com