【发布时间】:2009-07-06 03:39:49
【问题描述】:
在游戏中,我有一堆对象和对象集合,其中一些包含对其他对象的引用。有没有一种直接的方法来存档它们——保存游戏状态——同时保持这些引用?如果我理解得很好,NSArchiver 可以做到这一点,但它在 SDK 2 上不可用,是在 SDK 3 上吗?
(我之前曾问过这个问题(best way to save/load iphone game data),但 SDK 3 已经发布,我想知道这个话题是否有进展。)
【问题讨论】:
在游戏中,我有一堆对象和对象集合,其中一些包含对其他对象的引用。有没有一种直接的方法来存档它们——保存游戏状态——同时保持这些引用?如果我理解得很好,NSArchiver 可以做到这一点,但它在 SDK 2 上不可用,是在 SDK 3 上吗?
(我之前曾问过这个问题(best way to save/load iphone game data),但 SDK 3 已经发布,我想知道这个话题是否有进展。)
【问题讨论】:
您需要使所有要序列化的类都实现 NSCoding 协议。之后,您需要使用 NSKeyedArchiver 类对它们进行编码。该类将递归序列化您的对象,并将处理循环。 NSKeyedArchiver 在 iPhone SDK 的所有版本中都可用。要解码您的对象,您将使用 NSKeyedUnarchiver。
【讨论】:
在此处查看对象序列化:
Encoding/Decoding Objects (apple.com)
基本上,您必须使您的类符合键值编码,才能正确保存所有数据;它将它们归档到二进制属性列表中。在编写完 initWithCoder: 和 encodeWithCoder: 函数后,它几乎是自动的!
【讨论】: