GameKit GKLocalPlayer别名为NSDictionary键

时间:2013-02-11 00:01:04

标签: objective-c nsdictionary game-center nsmutabledictionary gamekit

我正在开发iDevice游戏,我想将本地玩家的分数存储在设备上。但是,本地玩家可能会改变。例如,如果一个家庭共享一台iPad,那么他们可能会在玩游戏之前单独登录GameCenter。为了解决这个问题,我决定将本地分数存储为字典,其中键由本地播放器确定,值是GKScore对象的数组。

我的第一个想法是使用GKLocalPlayer共享实例作为密钥,但由于它不符合NSCopying,因此GKLocalPlayer不是理想的关键候选者。我的第二个想法是使用本地播放器的标识符,但Apple声明“不要对播放器标识符字符串的内容做出假设。它的格式和长度可能会发生变化。”当然,我担心一个玩家可能会失去他们的本地分数,如果他们的玩家标识符神奇地改变了一天。

我最后的想法是使用本地玩家的别名。我已确认未经身份验证的本地播放器的别名字符串等于nil。在这种情况下使用[NSNull null]作为字典键是否安全?假设本地玩家的别名保持一致是否安全?

1 个答案:

答案 0 :(得分:1)

唯一保证玩家永久性的是playerID字符串。当它说格式和长度可能会发生变化时,那就是在尝试解释字符串的上下文时。 AFAIK并不是特定玩家的ID可能会改变,但Apple可能会在将来使用不同的方案生成ID,因此您不应该依赖具有任何特定格式的字符串或某些信息可以从字符串中派生出来。

尽管如此,文档非常明确地说是正确的方法:

  

Game Center上的每个玩家账户都会永久分配一个唯一的玩家标识符字符串。您的游戏应使用此字符串存储每个玩家的信息或消除玩家之间的歧义