0

我正在開發一個iDevice遊戲,我想將本地玩家的分數存儲在設備上。但是,本地玩家可能會改變。例如,如果一個家庭共享一個iPad,那麼他們可以在玩遊戲之前單獨登錄GameCenter。爲了解決這個問題,我決定將本地樂譜存儲爲字典,其中的關鍵字由本地播放器確定,值爲GKScore對象的數組。GameKit GKLocalPlayer別名作爲NSDictionary鍵

我的第一個想法是使用GKLocalPlayer共享實例作爲關鍵,但由於它不符合NSCopying,因此GKLocalPlayer並不是理想的關鍵人選。我的第二個想法是使用本地播放器的標識符,但是Apple聲明「不要對播放器標識符字符串的內容做出假設,其格式和長度可能會發生變化。」當然,我擔心如果球員標識符有一天神奇地改變,球員可能會失去本地比分。

我最終的想法是使用本地播放器的別名。我已確認未認證的本地播放器的別名字符串等於nil。在這種情況下使用[NSNull null]作爲詞典鍵是否安全?假設本地球員的別名會保持一致是否安全?

回答

1

玩家唯一保證是永久的是playerID字符串。當它說格式和長度可能會發生變化時,那就是試圖解釋字符串的上下文。 AFAIK並不是說某個特定玩家的ID可能會發生變化,但Apple可能會在將來使用不同的方案生成ID,因此您不應該依賴具有任何特定格式的字符串或從字符串中推導出某些信息。

該文檔是相當明確的關於正在以正確的方式做到這一點,雖然:

在遊戲中心每個玩家賬號被永久地分配一個獨一無二的球員標識字符串。您的遊戲應該使用此字符串來存儲每個玩家的信息或消除玩家間的歧義

+0

謝謝!我剛纔在文檔中發現了這個確切的片段,但我很欣賞答案。如何使用'[NSNull null]'作爲字典鍵? – 2013-02-11 00:23:23

+0

@SamHertz:NSNull作爲字典鍵非常有效。字典鍵唯一的約束是它們必須是可複製的,並且NSNull實現NSCopying。 – Chuck 2013-02-11 04:25:33