문제

나는 사전의 사전이있다. 그것들은 모두 직렬화 할 수있는 Poco 객체입니다. 디스크에 이것을 작성하려면 어떤 기술을 살펴 봐야합니다. 상태를 저장하기 위해 몇 가지 목록을 작성하는 가장 간단한 옵션을 찾고 있습니다.

3 가지 옵션이 있다고 생각합니다.

  1. PLIST 파일. 그러나 이것은 사전 정의 된 객체 (문자열, 숫자 등)가 대상 (이름과 나이가있는 사람과 같은) 만 저장하는 것으로 제한되는 것 같습니다.

  2. Coredata. (3.0의 새로운) 이것은 잘 작동 할 것입니다. 그러나이 작업을 수행하려면 내 데이터 모델이 변경되어야합니다. 이것은 엄청난 재 작업 일 것이며 그것이 노력할 가치가 있는지 확실하지 않습니다.

  3. sqllite. 읽을 수있는 간단한 SQL 데이터베이스를 구현하십시오. 나는 이것에 가장 적은 양의 Reserch를 수행했지만 일부 핵심 데이터 ORM 기능을 '다시 작성'하고 싶지는 않습니다.

도움이 되었습니까?

해결책

Mac OS X에서 수행하는 것과 같은 방식 으로이 작업을 수행합니다. Pocos는 NSCoding 규약. 보다 여기 개념적 참조를 위해 여기 NSCoding 참조 용.

데이터가 그다지 미친 광범위하지 않고 대상간에 엄청나게 복잡한 관계가 없다면, 모든 것을 명성으로 쓰는 것이 가장 좋은 선택 일 것입니다. 실행하는 것이 매우 빠르며 코드에서 구현하기가 간단합니다. 당신이 말했듯이, Coredata는 아마도 많은 코드를 조정하기위한 추가 작업 중 SQLite는 실제로 관계형 데이터베이스에 저장하기에 완벽한 데이터를 저장하는 데 적합합니다. SQLITE는 또한 이진과 함께 작업하는 것보다 더 느리고 더 많은 자원을 사용한다는 점을 명심하십시오.

다른 팁

사용자 정의 객체를 직렬화하려면 NSCoding 규약. 객체가 nsobject를 확장하면 (나는 믿는다) (개인 개체의 예)를 구현하는 것입니다.

// Encode an object for an archive
- (void)encodeWithCoder:(NSCoder *)coder
{
    [super encodeWithCoder:coder];
    [coder encodeObject:name forKey:@“Name”];
    [coder encodeInteger:age forKey:@“Age”];
}
// Decode an object from an archive
- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    name = [[coder decodeObjectForKey:@“Name”] retain];
    age  = [coder decodeIntegerForKey:@“Age”];
}

NSArray 그리고 NSDictionary 이미 직렬화 방법을 구현합니다. 그들은 그들이 보유하는 모든 객체를 직렬화합니다 (객체가 nscoder 인터페이스를 구현하는 경우 - nsobject를 확장하는 경우 수행). nsobject 's encodeWithCoder 그리고 initWithCoder 클래스에서 자신의 코드를 구현하지 않는 한 기본적으로 아무것도하지 않습니다.

nsarray 또는 nsdictionary의 객체가있는 경우 다음을 사용하여 동기화 할 수 있습니다.

// Writing
- (BOOL)writeToFile:(NSString *)aPath atomically:(BOOL)flag;
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag;
// Reading
- (id)initWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfURL:(NSURL *)aURL;

NSCoder 직렬화를위한 표준 코코아 관용구입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top