Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用NSKeyedArchiver从NSDictionary中保存的NSManagedObject生成XML_Ios_Cocoa_Core Data_Nskeyedarchiver - Fatal编程技术网

Ios 使用NSKeyedArchiver从NSDictionary中保存的NSManagedObject生成XML

Ios 使用NSKeyedArchiver从NSDictionary中保存的NSManagedObject生成XML,ios,cocoa,core-data,nskeyedarchiver,Ios,Cocoa,Core Data,Nskeyedarchiver,我有一个NSDictionary,其中包含一组NSManagedObject。 然后,我可以使用NSKeyedArchiver将其写入NSData对象。 这些都是使用它生成的,它工作得很好,允许我将模式的一部分保存到光盘上,然后将其作为核心数据模型中的一组新对象读回。 如果我使用archivedDataWithRootObject: 或archiveRootObject:toFile:,根据 我可以看到归档文件的格式是NSPropertyListBinaryFormat_v1_0,而我想在NSP

我有一个NSDictionary,其中包含一组NSManagedObject。 然后,我可以使用NSKeyedArchiver将其写入NSData对象。 这些都是使用它生成的,它工作得很好,允许我将模式的一部分保存到光盘上,然后将其作为核心数据模型中的一组新对象读回。 如果我使用archivedDataWithRootObject: 或archiveRootObject:toFile:,根据 我可以看到归档文件的格式是NSPropertyListBinaryFormat_v1_0,而我想在NSPropertyListXMLFormat_v1_0中序列化,这样我就可以将对象写入一个文件,然后在其他地方将它们作为普通的旧XML进行处理。(事实上,我想在基于Windows的系统上从它们生成文档。)

1) 我有办法做到这一点吗?如果是,怎么做? 2) 有没有更好的办法

我希望保持序列化的性质,因为我还希望稍后将文件发送回iOS设备并重新创建对象模型

  • 使用
    initForWritingWithMutableData:
    创建自己的
    NSKeyedArchiver
    实例
  • 使用
    setOutputFormat:NSPropertyListXMLFormat\u v1\u 0
    设置格式
  • 使用
    encodeObject:forKey:
    对根对象进行编码
  • 调用
    finishEncoding

  • 要取消归档以这种方式编码的数据,您必须以类似方式实例化一个
    NSKeyedUnarchiver

    谢谢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];