【问题标题】:Lose saved data on app update在应用更新时丢失保存的数据
【发布时间】:2015-05-11 23:15:59
【问题描述】:

在创建 Unity3D 应用程序的新版本时,我在从商店安装的基础上测试了侧载新版本。侧载应用不再能够找到从商店版本保存的文件。

问题似乎在于两个应用版本之间的 Application.persistentDataPath 不同。

在 BuildSettings 下:

Install Location: Prefer External
Write Access:     Internal Only

AndroidManifest.xml 似乎没有关于安装位置/写入访问位置的信息。

我不介意将安装位置更改为强制内部,如果这有助于此次更新和/或将来。但我不确定该设置的作用。

我正在使用 C# 的 XMLSerializer 保存 XML 文件,然后使用 Application.persistentDataPath 将它们写入 FileStream。

XmlSerializer serializer = new XmlSerializer(typeof([CLASS]));
FileStream stream = new FileStream( Application.persistentDataPath + "/[FILENAME].xml", FileMode.Create);    
serializer.Serialize( stream, [OBJECT]);    
stream.Close();

【问题讨论】:

  • 您使用什么代码来保存数据? PlayerPrefs 通常对我很有效。
  • 已修改问题以包含更多详细信息。谢谢你的提问,我忘了我必须不早点使用 PlayerPrefs。

标签: android unity3d


【解决方案1】:

您可以尝试将 XML 字符串保存在 PlayerPrefs 中,如下所示:

PlayerPrefs.SetString("SaveGameName", yourXML);

然后得到它:

myxml = PlayerPrefs.GetString("SaveGameName");

过去,PlayerPrefs 类对我来说非常适合用于持久数据。我知道即使您从应用商店安装新版本,这些数据仍然存在。

http://docs.unity3d.com/ScriptReference/PlayerPrefs.html 这是上面的文档。

【讨论】:

  • 哦,我知道您不能像评论中所说的那样使用 playerprefs。不确定在这种情况下您将如何规避此问题。
  • 理论上 Application.persistentDataPath 会让我将文件保存在类似的位置。但是,它似乎会随着更新而改变。
  • 我同意你的观点,这是令人困惑的。我在文档中看到捆绑标识符构成路径的一部分。难道是这个ID变了?我不记得应用商店是否甚至允许您上传具有不同捆绑 ID 的构建。来自文档:“如果您在未来的版本中保留相同的捆绑标识符,那么应用程序将在每次更新时继续访问相同的位置。”
  • 包标识符一致。
猜你喜欢
  • 2019-08-31
  • 2016-09-18
  • 1970-01-01
  • 2018-05-05
  • 2011-08-02
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多