2009-07-06 5 views
2

게임에는 여러 개체의 개체와 개체 모음이 있으며 그 중 일부는 다른 개체에 대한 참조를 포함합니다. 이러한 참조를 유지하면서 게임 상태를 저장하기 위해이를 보관하는 간단한 방법이 있습니까? 잘 이해한다면 NSArchiver는 그렇게 할 수는 있지만 SDK 2에서는 사용할 수 없었습니다. SDK 3에서 사용할 수 있습니까? 연결된 개체를 쉽게 보관하는 방법

는 (I 일종의 best way to save/load iphone game data (전에이 질문을했다) 그러나 SDK (3) 그 동안 발표되었으며,이 주제는 진행되고 있다면 알고 싶습니다.) 여기

답변

3

직렬화하려는 모든 클래스를 NSCoding 프로토콜을 구현해야합니다. 그런 다음 NSKeyedArchiver 클래스로 인코딩해야합니다. 이 클래스는 반복적으로 객체를 직렬화하고 순환을 처리합니다. NSKeyedArchiver는 모든 iPhone SDK 릴리스에서 사용할 수 있습니다. 개체를 디코딩하려면 NSKeyedUnarchiver를 사용합니다.

+0

개체간에 참조가 유지됩니까? 콜렉션의 오브젝트가 다른 콜렉션의 다른 오브젝트에 대한 포인터를 가지고 있다고 해봅시다. 오브젝트가 디코딩 된 후에도 포인터가 계속 남아 있다고합시다. –

+0

예, 여러 참조 및주기를 처리합니다. 모든 객체가 NSCoding 프로토콜에서 initWithCoder :, encodeWithCoder :를 구현하는지 확인하면됩니다. 이것이 Cocoa에서 사용되는 가장 일반적인 장소는 NIB 파일입니다. Interface Builder는 인터페이스를 AppKit 클래스의 인스턴스로 생성 한 다음 NSCoder를 사용하여이를 아카이브합니다. –

+0

그것은 매력처럼 작동합니다. 나는 비슷한 질문에 답하기 때문에 몇 달 동안 오도되었다. 그것을 정리해 주셔서 감사합니다, 그것은 진짜 인생의 변화자이고, 평판을 가진 사람들이 stackoverflow에서 말하는 것을 전혀 믿지 않는 교훈입니다. :) –

0

체크 아웃 객체 직렬화 :

Encoding/Decoding Objects (apple.com)

기본적으로, 당신은 당신의 수업을해야 키 - 값 코딩 준수, 제대로 모든 데이터를 저장하는 단계; 그것들을 바이너리 속성 목록에 저장합니다. initWithCoder : 및 encodeWithCoder : 함수를 작성한 후에는 거의 자동으로 수행됩니다.

+0

키 - 값 코딩과 NSCoding은 두 가지 별도의 개념입니다. –

관련 문제