2011-10-04 93 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];