【问题标题】:NSKeyedUnarchiver not behaving as expectedNSKeyedUnarchiver 未按预期运行
【发布时间】:2012-01-11 11:00:33
【问题描述】:

我在 NSKeyedUnarchiver 中遇到了一个奇怪的行为。

我存档了一个数据,在这个例子中我只使用了一个字符串:

NSMutableData       *myData = [ NSMutableData data ];
NSKeyedArchiver     *archiver = [[ NSKeyedArchiver alloc ] initForWritingWithMutableData:myData ];
NSString            *testString = [ NSString stringWithString:@"Hello World!" ];
[ archiver encodeObject:testString forKey:@"test" ];
[ archiver finishEncoding ];

然后我想取消归档它。如果我使用

NSKeyedUnarchiver  *unarchiver = [ NSKeyedUnarchiver unarchiveObjectWithData:myData ];
NSString     *result = [ unarchiver decodeObjectForKey:@"test" ];

我得到 nil 结果,但如果我使用:

NSKeyedUnarchiver  *unarchiver = [[ NSKeyedUnarchiver alloc ] initForReadingWithData:myData ];
NSString     *result = [ unarchiver decodeObjectForKey:@"test" ];

我拿回了我的字符串。现在我认为 [ NSKeyedUnarchiver unarchiveObjectWithData:myData ] 只是 [[ NSKeyedUnarchiver alloc ] initForReadingWithData:myData ] 的一种便捷方法,但它的行为似乎并非如此。我错了吗?

谢谢 雷扎

【问题讨论】:

    标签: iphone ios macos nskeyedarchiver


    【解决方案1】:

    unarchiveObjectWithData

    Apple:“解码并返回先前由 NSKeyedArchiver 编码并存储在给定 NSData 对象中的对象图。”

    这意味着它会解压一个完整的类,而不是准备解压单个对象。

    initForReadingWithData

    Apple:“初始化接收器以解码以前由 NSKeyedArchiver 编码的存档。

    返回:为解码数据而初始化的 NSKeyedUnarchiver 对象。”

    这意味着只需初始化一个准备好接受取消归档方法调用的取消归档程序。

    【讨论】:

      猜你喜欢
      • 2014-11-12
      • 1970-01-01
      • 2020-06-28
      • 2012-02-18
      • 2018-01-18
      • 2012-06-14
      • 2019-03-03
      • 2012-09-21
      • 2014-07-19
      相关资源
      最近更新 更多