【问题标题】:Injecting into NSData (Generated from NSCoding) from External Source?从外部源注入 NSData(从 NSCoding 生成)?
【发布时间】:2012-04-13 00:06:45
【问题描述】:

我们有一个应用程序,我们使用 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"];

}

谢谢!

【问题讨论】:

  • 你使用了哪些具体的 NSCoding 子类?
  • 我的子类基于 UIControl。 @interface IoUIScreenElement : UIControl <UIGestureRecognizerDelegate, UINavigationControllerDelegate, IoUIInspectorDelegate, IoUITextInspection, IoUIRotationInspection, IoUIPositionInspection, IoUIBigButtonInspection, NSCoding> 在我的课堂上,我有一个-(void) encodeWithCoder:(NSCoder *)encoder 调用[super encodeWithCoder:encoder];,然后对我的一些东西进行编码。你问的是这个吗?
  • 不,我想知道作为实际编码器传入的类。也许NSKeyedArchiver
  • 我已经编辑了 OP 以包含我用来获取数据的代码。谢谢!

标签: objective-c xml nsdata nscoding


【解决方案1】:

如果您像这样设置键控存档器的输出格式:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多