nspropertylistxmlformat_v1_0 형식에서 nskeyedarchiver를 사용하여 파일로 객체를 직렬화하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/726053

문제

바라건대 그 제목이 충분히 분명합니다. 어쨌든, 그것은 다음과 같습니다.

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];

제한됩니다 NSPropertyListBinaryFormat_v1_0.

인간을 읽을 수있는 형식이 필요합니다 [So XML]. 관심이 있다면, 이것은 프로젝트의 일부입니다. 결국 "GPS 애플리케이션을 장치하는 방법"에 대한 블로그 게시물과 함께 GitHub에 올려 놓습니다.

:-)

도움이 되었습니까?

해결책

당신은 사용해야합니다 NSPropertyListSerialization 그것을 변환합니다. 기본적으로 직렬화 된 객체를 호출한다고 가정합니다. myObject 그리고 궁극적 인 파일은 저장됩니다 myPath, 다음 코드 조각과 같은 것을 사용하여 XML로 직렬화합니다.

NSString *error = nil;
NSData *mySerializedObject = [NSKeyedArchiver archivedDataWithRootObject:myObject];
NSData *xmlData = [NSPropertyListSerialization dataFromPropertyList:mySerializedObject
                        format:NSPropertyListXMLFormat_v1_0
                        errorDescription:&error]:
if( xmlData ) {
    [xmlData writeToFile:myPath atomically:YES];
} else {
    NSLog(error);
    [error release];
}

다른 팁

클래스 메소드를 사용하는 대신 nskeyedarchiver 인스턴스를 만들고 사용하십시오. setOutputFormat:NSPropertyListXMLFormat_v1_0 XML 형식을 지정합니다. 유일한 단점은 실제로 직렬화를 처리하기 때문에 몇 줄의 추가 코드 라인을 가져가는 것입니다. 한 단계로 NSDATA 객체를 반환하는 것은 아닙니다.

메소드 -(void) encodewithcoder (nscoder *) encoder {를 사용하여 객체 클래스를 인코딩해야합니다.

[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];

}

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