2011-10-04 92 views
2

我有一个NSDictionary,它包含一堆NSManagedObjects。 然后,我可以使用NSKeyedArchiver将其写入一个NSData对象。 这些是使用this method.生成的,它可以正常工作,并允许我将一部分模式保存到光盘,然后作为核心数据模型中的一组新对象进行读取。 如果我请使用archivedDataWithRootObject: 或archiveRootObject:TOFILE :,为每documentation 我可以看到档案的格式是NSPropertyListBinaryFormat_v1_0,而我想在NSPropertyListXMLFormat_v1_0以连载,让我可以写我的对象到一个文件,然后将它们作为普通的旧XML处理。 (实际上我想在基于Windows的系统上从它们生成文档。)使用NSKeyedArchiver从保存在NSDictionary中的NSManagedObjects生成XML

1)有没有办法可以做到这一点?如果是这样如何? 2)有没有更好的方法。

我想保持序列化的本质,因为我也想在稍后将文件发送回iOS设备并重新创建对象模型。

回答

3
  1. initForWritingWithMutableData:创建自己的NSKeyedArchiver的实例。
  2. 设置格式为setOutputFormat:NSPropertyListXMLFormat_v1_0
  3. 使用encodeObject:forKey:对根对象进行编码。
  4. 致电finishEncoding

要以这种方式对您编码的数据进行解压缩,您必须同样实例化一个NSKeyedUnarchiver

1

谢谢Ole!我正朝着这个方向前进,但不确定这是否是正确的方向。这是我在代码中所做的,以帮助某人。

NSDictionary *dataAsDictionary=[self toDictionaryBlockingRelationships:blockRelationship]; 
NSString *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath]; 
NSMutableData *xmlData=[NSMutableData data]; 

NSKeyedArchiver *archive=[[NSKeyedArchiver alloc ]initForWritingWithMutableData:xmlData]; 

[archive setOutputFormat:NSPropertyListXMLFormat_v1_0]; 
[archive encodeRootObject:dataAsDictionary]; 
[archive finishEncoding]; 

if(![xmlData writeToFile:savePath atomically:NO]){ 
    NSLog(@"Failed to write to file to filePath=%@", savePath); 
} 
[archive release];