0

iDevice 게임을 개발 중이며 로컬 플레이어의 점수를 기기에 저장하고 싶습니다. 그러나 로컬 플레이어가 변경 될 수 있습니다. 예를 들어, 한 가족이 iPad를 공유하면 게임을하기 전에 GameCenter에 별도로 로그인 할 수 있습니다. 이 문제를 해결하기 위해 로컬 플레이어가 키를 결정하고 값이 GKScore 객체의 배열 인 사전으로 로컬 스코어를 저장하기로 결정했습니다.GameKit GKLocalPlayer 별칭을 NSDictionary 키로 사용합니다.

첫 번째 아이디어는 GKLocalPlayer 공유 인스턴스를 키로 사용하는 것이지만 NSCopying을 준수하지 않으므로 GKLocalPlayer는 이상적인 키 후보가 아닙니다. 두 번째 아이디어는 로컬 플레이어의 식별자를 사용하는 것이었지만 Apple은 "플레이어 식별자 문자열의 내용에 대해 가정하지 마십시오. 형식 및 길이는 변경 될 수 있습니다." 당연히 플레이어 식별자가 마술처럼 바뀌면 플레이어가 로컬 스코어를 잃을 수도 있습니다.

나의 마지막 아이디어는 로컬 플레이어의 별칭을 사용하는 것이 었습니다. 인증되지 않은 로컬 플레이어의 별칭 문자열이 nil과 같은지 확인했습니다. 이 경우 사전 키로 [NSNull null]을 사용하는 것이 안전합니까? 로컬 플레이어의 별칭이 일관성을 유지한다고 가정하는 것이 안전합니까?

답변

1

영구적 인 플레이어의 유일한 점은 playerID 문자열입니다. 형식과 길이가 변경 될 수 있다고 말하면 문자열의 컨텍스트를 해석하려는 컨텍스트에 있습니다. 특정 플레이어의 ID가 변경 될 수있는 것은 아니지만 Apple이 다른 스키마를 사용하여 ID를 생성 할 수 있으므로 특정 형식의 문자열이나 문자열에서 파생 가능한 특정 정보에 의존해서는 안됩니다.

워드 프로세서 그것에 대해 매우 모호을 할 수있는 올바른 방법,하지만 것 :

게임 센터에 모든 플레이어 계정을 영구적으로 고유 플레이어 식별자 문자열이 할당됩니다. 게임은이 문자열을 사용하여 플레이어 별 정보를 저장하거나 플레이어 간 모호성을 구분해야합니다.

+0

고마워요! 필자는 잠시 전에 문서의 정확한 스 니펫을 발견했지만 답변을 주셔서 감사합니다. '[NSNull null]'을 사전 키로 사용하는 것은 어떨까요? –

+0

@SamHertz : NSNull은 사전 키로 완벽하게 유효합니다. 사전 키의 유일한 제약 조건은 복사 가능해야하며 NSNull은 NSCopying을 구현해야한다는 것입니다. – Chuck