nspropertylistxmlformat_v1_0 형식에서 nskeyedarchiver를 사용하여 파일로 객체를 직렬화하려면 어떻게해야합니까?
-
05-09-2019 - |
문제
바라건대 그 제목이 충분히 분명합니다. 어쨌든, 그것은 다음과 같습니다.
[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"];
}
제휴하지 않습니다 StackOverflow