Ios 通过游戏中心发送NSData中的NSArray和Struct
我正在创建一个游戏,在多人游戏中心的设备之间发送一些数据 我发送的数据包括一个NSArray&一条通知其他玩家分数变化的消息 我已将score消息的结构定义为:Ios 通过游戏中心发送NSData中的NSArray和Struct,ios,objective-c,nsdata,game-center,multiplayer,Ios,Objective C,Nsdata,Game Center,Multiplayer,我正在创建一个游戏,在多人游戏中心的设备之间发送一些数据 我发送的数据包括一个NSArray&一条通知其他玩家分数变化的消息 我已将score消息的结构定义为: typedef NS_ENUM(NSUInteger, MessageType) { kMessageTypeUpdateScore }; typedef struct { MessageType messageType; } Message; typedef struct { Message message
typedef NS_ENUM(NSUInteger, MessageType) {
kMessageTypeUpdateScore
};
typedef struct {
MessageType messageType;
} Message;
typedef struct {
Message message;
int score;
} MessageUpdateScore;
下面是接收数据的代码:
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID {
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
// data is an array
Message *message = (Message *)[data bytes];
if (message->messageType == kMessageTypeUpdateScore) {
// data is a message
}
}
我的问题是-如何区分NSArray和消息,以便我可以解包NSData并相应地使用它执行不同的操作?我遇到了同样的问题,您可以在这里找到我的解决方案: 如果您找到了更好的解决方案,请留下一些反馈
您可以找到一个工作示例。在定义内容的NSData的第一个元素中添加一个sentinel字节。如何做到这一点?这类似于给一些可变数据追加一个字节吗?类似,是的,但是你把它放在了前面。我试过这么做,但是当我试图读回它时,我得到了一个EXC_BAD_访问错误。你能概述一下插入和读取字节的步骤或代码吗?首先,没有办法创建一个能够保存NSArray中的任何内容和分数的单一数据结构,因此只发送一种类型的消息吗?