2

我是 GKTurnBasedMatch 的新手,我正在尝试找出在回合期间玩家之间发送的“matchData”的良好做法。我发现的所有教程主要涉及发送一串文本,我想发送的远不止这些。如果有人能给我推荐一个更高级的教程,那就太好了。

我想做的一个例子是战斗。两个玩家有他们的头像,他们有不同的细节(健康、攻击、防御等),我应该如何发送这些数据?我认为可能的唯一方法是将所有匹配详细信息(其中很多)编码到 NSDictionary 中并发送,以便它们可以再次放回自定义匹配对象中。我应该实施 NSCoding 吗?

谢谢!

4

1 回答 1

6

我将实现一个类来存储单回合所需的所有相关信息,并让该类实现 NSCoding。这意味着您可以在一个播放器的设备上将对象转换为 NSData,然后将其转换回另一端的对象。

这个网站http://samsoff.es/posts/archiving-objective-c-objects-with-nscoding有一个简单的例子来帮助你,这里是你需要的主要方法的例子:

- (id)initWithCoder:(NSCoder *)decoder {
    if (self = [super init]) {
        self.health = [decoder decodeObjectForKey:@"health"];
        self.attack = [decoder decodeObjectForKey:@"attack"];
        isDead = [decoder decodeBoolForKey:@"isDead"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:self.health forKey:@"health"];
    [encoder encodeObject:self.attack forKey:@"attack"];
    [encoder encodeBool:isDead forKey:@"isDead"];
 }

将您的对象编码为 NSData:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject: object];

转换回对象:

id *object = [NSKeyedUnarchiver unarchiveObjectWithData: inputData];

Archives and Serializations Programming Guide也是一个很好的起点。

另一种选择是使用像 RestKit 这样的库,它是与 JSON 或 XML 的对象映射。

于 2012-08-24T06:41:52.357 回答