2013-05-15 3 views
2

iOS 학습을 시작하면서 정말 기본적인 질문이 있습니다. 전체 개체 컬렉션을 보관/보관 취소하는 올바른 방법은 무엇입니까?iOS : 개체 컬렉션을 보관/보관 취소하는 올바른 방법

먼저 클래스에 NSCoder 프로토콜을 구현해야한다는 것을 알고 있습니다.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); 
NSString *docsDir = [paths objectAtIndex:0]; 
NSString *archivePath = [docsDir stringByAppendingPathComponent:@"thing.model"]; 
Thing *thing = [[Thing alloc] init]; 
[NSKeyedArchiver archiveRootObject:thing toFile:archivePath]; 

지금이 바로 올바른 파일 thing.model, 하나 Thing을 저장 : 내가 제대로 보관 해제를 보관할 수 클래스를 가지고 가정하면,이처럼 보이는 예제를 공부하고 있었어요?

내 앱에 많은 "사물"이 있고이를 모두 보관하려면 어떻게 접근합니까?

좀 더 구체적으로 (일부 상황에서 도움이되는 경우) 웹 서비스를 통해 지원되는 앱을 개발하고 있으며 앱에서 레코드를 만들고 편집하고 디스크에 저장하고 싶습니다. 로컬로 저장 한 객체를 웹 서비스와 주기적으로 동기화합니다.

감사합니다.

답변

4

컬렉션 클래스는 NSCoding을 준수합니다. 따라서 NSArrayThing 인 경우 배열을 보관/보관 취소하십시오.

+0

어레이의 항목이 NSCoder를 준수해야 작동한다는 것을 이해합니다. – Andrew

+0

정확합니다. – rmaddy

+0

LOL은 15 자 이상 입력해야 "예"소리가 매우 정교합니다. 이것은 매우 도움이되었다, 감사합니다! – Andrew

0

그래서, 내 응용 프로그램이 많은 "일"을 가지고 있으며, 나는 당신이 접근 어떻게, 그들 모두를 보관하고 싶다면?

당신이 개별적으로 그 일의 각을 저장 객체 (그리고 나중에를 검색하는 데 사용할 키) 아카이브를 추가 -encodeObject:forKey:을 사용합니다.

rmaddy가 지적했듯이 모든 것이 컬렉션에 있으면 컬렉션을 단일 개체로 보관할 수 있습니다. 다시 말하지만, -encodeObject:forKey:을 사용하여이 작업을 수행 할 수 있습니다. 컬렉션이 아카이브의 유일한 것이라면 위에 설명한대로 archiveRootObject:toFile:을 사용하여 작업을 수행 할 수 있습니다.