iOS 6和iOS 7中存档的价值不同。

3

当我对MyDTO进行归档时,iOS 6和iOS 7中的档案价值不同。
为什么会出现这种情况?

MyDTO.h

@property (nonatomic, strong) NSString *aaa;
@property (nonatomic, strong) NSString *bbb;

MyDTO.m

- (void)encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeObject:_aaa forKey:@"aaa"];
    [encoder encodeObject:_bbb forKey:@"bbb"];
}

我的方法

- (void)test {
    MyDTO *myDTO = [[MyDTO alloc] init];
    myDTO.aaa = @"1";
    myDTO.bbb = @"2";

    //data is different in iOS 6 and iOS 7
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myDTO];
}

编辑

下列步骤中出现了错误。

  1. DTO归档(iOS 6)
  2. 操作系统升级(iOS 6 -> iOS 7)
  3. DTO解档(iOS 7) <- 出现错误!

错误日志

[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x48, 0xfffffff2, 0xffffffd7, 0xffffff89, 0xffffff80, 0xffffffa8, 0x70, 0xffffff8d)

以下步骤中的常规操作。

  1. DTO归档(iOS 6)
  2. DTO解档(iOS 6)

或者

  1. DTO归档(iOS 7)
  2. DTO解档(iOS 7)

我假设归档值不同是由于版本不同引起的。


格式可能在iOS 7中被修改了。应该是兼容的。 - Anya Shenanigans
我在iOS 6中存档了MyDTO。现在,我的操作系统是iOS7。我无法解档MyDTO。有解决方案吗? - h.usune
你在真实设备上进行测试了吗? 我已经成功地在6.1->7.0(32位,64位)上进行了存档和去档的操作,并且当我将数据复制回6.1系统时,这个简单对象也正常工作。 - Anya Shenanigans
是的,我正在真实设备上进行测试。 我已经添加了详细信息。 - h.usune
有人找到了解决方法吗? - Radu Dan
不,我差点放弃了 (´;ω;`) - h.usune
1个回答

0
你可以传输一个 JSON 字符串而不是 NSData,并添加从 JSON 初始化 DTO 的方法以及从 DTO 创建 JSON 的方法。我正在使用这种方法通过蓝牙低功耗交换数据,在 iOS 7 和 iOS 8 设备之间运行良好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接