如何存储无法修改为UserDefaults的自定义对象?

时间:2020-03-21 14:55:55

标签: ios swift xcode

我正在构建一个游戏,该游戏使用的框架中带有深度学习机器人。我可以使用名为GameSession()的类访问该机器人,以使其正常工作,我需要将其发送给我的运动gameSession.userPlay(x),然后要求其进行运动(gameSession.move())。问题是我无法访问可以保存并用作持久性游戏的当前状态,我不能修改此类,因为它是使它可编码的框架。

所以基本上,我想以某种方式将gameSession()对象存储到userdefaults中,因为这是关闭应用程序时实现持久性的唯一方法。如果我只存储自己可以存储的屏幕状态,那么当我再次加载应用程序时,由于无法预测其行为,该机器人将不会进入该状态。如图所示,它可以对同一动作执行两个不同的响应。

以下是其基本象棋游戏的工作方式:

  1. 我创建会话,
  2. 我让用户选择他们的举动->将此数据传递给会话,以便漫游器知道用户的操作,
  3. 我从机器人那里得到响应,然后使用机器人动作来更改更新游戏。

现在,我希望能够在移动几步后关闭应用程序并将其重新加载。我曾经使对象可编码,但是如果我使另一个实现可编码的类并具有会话,则无法修改作为对象,我无法对该特殊对象进行编码和解码。

有人有什么建议吗?

1 个答案:

答案 0 :(得分:1)

通常,这些框架是这样做的:有问题的对象可以使用NSCoding进行序列化,或者根据请求将可通过NSCoding进行序列化的状态保留对象交给您。然后,您可以存档并还原该文件。因此,请通过API查找在某个地方显示NSCoding的对象类型。

我之所以说NSCoding是因为这是长期的序列化Objective C基础。 Codable是Swift,并且相当新。

无论哪种方式,您的目标都是将状态转换为Data / NSData对象,因为这是您可以存储在磁盘上或用户首选项中的那种东西。 (可能是框架的API实际上为您执行此操作,并直接将您的Data对象交给您;也可以查找该对象。)

如果此框架没有此类功能,则您将无法维持两次启动之间的状态,并且不应使用此框架,因为它不适用于iOS。