Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过游戏中心发送NSData中的NSArray和Struct_Ios_Objective C_Nsdata_Game Center_Multiplayer - Fatal编程技术网

Ios 通过游戏中心发送NSData中的NSArray和Struct

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

我正在创建一个游戏,在多人游戏中心的设备之间发送一些数据

我发送的数据包括一个NSArray&一条通知其他玩家分数变化的消息

我已将score消息的结构定义为:

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中的任何内容和分数的单一数据结构,因此只发送一种类型的消息吗?