2009-12-09 6 views
1

개체의 NSDictionary를 장치에 저장하려면 아래 코드를 사용하고 있습니다. 이 아카이브를 열고, 포함 된 사전 항목을 드릴 다운하고, 이상적으로, 데이터를 편집 할 수있는 방법이 있습니까? 저의 추측은 아닙니다. 저장시 최적화가 이루어지면 압축 파일을 해석하기가 어려워집니다. 적어도 속성 목록 편집기과 같은 형식으로 열면 나타납니다. 예를 들어, 내 개체의 일부가 유사한 NSString을 공유하는 경우 NSString이 한 번만 아카이브되었다고 표시되는 것처럼 보입니다. NSDictionary의 구조를 예상했던 것에서 변경합니다.안정적으로 열고 NSKeyedArchiver의 아카이브를 편집 할 수 있습니까?

- (BOOL)writeDataToFile { 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:myDictionary forKey:kDataKey]; 
[archiver encodeInteger:kDataFileVersion forKey:kDataVersionKey]; 
[archiver finishEncoding]; 
BOOL success = [data writeToFile:[self dataFilePath] atomically:YES]; 
[archiver release]; 
[data release]; 
return success; 
} 

답변

1

진짜 질문은 "해야합니까?" 아마 그렇지 않을거야.

물론 파일 형식을 구문 분석 할 수 있지만 해당 형식은 이 될 수있는 구현 세부 사항이며 변경이 가능하며 그만한 가치가 없습니다.

왜이 작업을 수행하려고합니까? 핵심 데이터 + sqlite를 증분 편집하려고하십니까? 그냥 평범한 오래된 sqlite 자체가 문제를 해결할 것이라고?

+0

내가이 파일을 구문 분석 할 수있는 몇 가지 * 또는 일부 도구 *를 간과하고 있거나 알지 못했을 때 나는 단지 궁금했다. 왜? 대부분 애플리케이션이 아카이브의 여러 유형의 데이터에 어떻게 반응하는지 테스트합니다. CD 또는 SQLite와 관련된 것은 없습니다. – Meltemi

+0

이것은 유효한 요청에 대한 다소 도움이되지 않는 대답입니다. 예를 들어, Xcode의 핵심 데이터 스키마 편집기로 만든 "레이아웃"과 "요소"파일 같은 두 가지 버전의 plist 파일을 비교해야합니다.이 경우 원시 plist 파일을 비교할 때 텍스트 plist로 바뀌어도 , 모델이 거의 변경되지 않은 경우에도 많은 ID가 변경 될 수 있으므로 잘 작동하지 않습니다. 실제로 변경된 사항을 알기 위해 이러한 보관 된 오브젝트의 오브젝트 레이아웃을 확인해야합니다. –

+0

사실은 실제 내부 데이터로 유지됩니다. 이 파일들을 코딩하는 것은 하나의 OS 버전에서 다음 버전으로 바뀔 수있는 구현 세부 사항입니다. 그것은 가능하지는 않겠지 만, 수동으로 분석하고 그것을 바꿔서 다시 작성하려고 시도하는 것은 나쁜 생각입니다. 데이터 구조 및 키 이름을 미리 안전하게 보관할 기회가 있습니다. 그런데도 보관 취소 된 * 실제 * 클래스는 이전 버전의 클래스에 대해 작성된 아카이브에 내부적으로 수행 할 수 있습니다. ** 나쁜 생각.** –

관련 문제