从外部源注入NSData(从NSCoding生成)?

时间:2012-04-13 00:06:46

标签: objective-c xml nsdata nscoding

我们有一个应用程序,我们使用NSCoding将对象数据存档到NSData中。然后,我们将NSData发送到XML解析器并将其发送到云服务器进行存储。

我们有一位客户希望能够在云服务器上更改或创建他们自己的对象,然后让我们的应用程序再次读取NSData并查看对象的内容。

客户是基于Windows的,因此我们需要一种方法让他们以编程方式生成与NSData一样存储的相同数据结构。我可以为它们提供我正在解码的数据密钥和数据类型。

有没有办法对NSData对象进行反向工程,并从非Objective-C的东西中注入,修改等等?

更新:2012.0413添加了代码:

以下是我用来获取数据的代码:

NSMutableData *data = [NSMutableData data];
NSKeyedArchiver  *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

    //go and encode ourselves so we can save our state in CD.
[self encodeWithCoder:archiver];

这是encodwWithCoder例程:

-(void) encodeWithCoder:(NSCoder *)encoder {

        //See if mama has anything for us...
    [super encodeWithCoder:encoder];
        //encode our state

    [encoder encodeObject:[self elementName] forKey:@"name" ];
    [encoder encodeObject:[self elementViewContents] forKey:@"elementViewContents" ];
    [encoder encodeObject:[self elementGestureRecognizerView] forKey:@"elementGestureRecognizerView" ];
    [encoder encodeCGRect:self.frame forKey:@"frame"];
    [encoder encodeCGRect:self.bounds forKey:@"bounds"];
    [encoder encodeCGPoint:self.center forKey:@"center"];
    [encoder encodeBool:elementLocked forKey:@"elementLocked"];

}

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您设置键控归档器的输出格式如下:

NSMutableData *data = [NSMutableData data];
NSKeyedArchiver  *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver setOutputFormat:NSPropertyListXMLFormat_v1_0];
[self encodeWithCoder:archiver];

然后NSData将只是XML文本(UTF8编码,我认为?),任何东西都应该能够解析和修改。