Objective c 如何使用NSPropertyListXMLFormat\u v1\u 0格式的NSKeyedArchiver将对象序列化为文件?

Objective c 如何使用NSPropertyListXMLFormat\u v1\u 0格式的NSKeyedArchiver将对象序列化为文件?,objective-c,cocoa,nskeyedarchiver,Objective C,Cocoa,Nskeyedarchiver,希望这个标题足够清楚。不管怎样,似乎: [NSKeyedArchiver archiveRootObject:rootObject toFile:path]; 仅限于NSPropertyListBinaryFormat\u v1\u 0 我需要的格式是人类可读的[so xml]。如果您感兴趣,这是我最终将在github上发布一篇关于“如何单元测试GPS应用程序”的博客文章的项目的一部分 :-)您必须使用NSPropertyListSerialization来转换它。基本上,假设要序列化的对象名

希望这个标题足够清楚。不管怎样,似乎:

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];
仅限于
NSPropertyListBinaryFormat\u v1\u 0

我需要的格式是人类可读的[so xml]。如果您感兴趣,这是我最终将在github上发布一篇关于“如何单元测试GPS应用程序”的博客文章的项目的一部分


:-)

您必须使用
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\u v1\u 0
指定XML格式,而不是使用class方法。唯一的缺点是它需要额外的几行代码,因为要真正处理序列化,它不会一步返回一个NSData对象。

您必须使用方法对对象类进行编码 -(无效)带编码器的编码器(NSCoder*)编码器{


}

谢谢,杰森!我正在测试这个。
[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];