【发布时间】:2011-08-02 05:37:28
【问题描述】:
我的第一个应用更新昨晚刚刚上线,我收到了一份投诉,称更新导致用户创建的数据(其中一些)消失了。我已经能够重现该问题,但不知道为什么。
在 Documents 目录中,我保存了一个密钥文件,它告诉我所有用户文件的“标题”及其文件名(完整路径)。那么用户的所有文件也都在 Documents 目录下。
当更新发生时,密钥文件仍然存在(至少,我认为这是因为数据显示在应用程序的第一个屏幕中 - 应用程序在更新后会完全退出并重新启动,对吧?),但是当用户尝试导航到实际文件中,没有数据,并且用户输入的任何新数据都不会保存。
当我不小心使用了无效的文件名(其中包含不正确的字符)时,它的行为与调试时完全相同 - 它从未保存过。但是随着更新,这些文件在旧版本中已经正确保存,但在新版本中却不知何故失败了。
这是我的第一个应用程序和我的第一次更新,我在这里很茫然。我暂时停止销售该应用程序(不知道您不能简单地恢复到旧版本!哎呀!)并且非常感谢关于在哪里/如何查找问题以及如何编写的任何想法不会丢失数据的良好更新。 (到目前为止,我发现的只是“将数据保存在 Documents 目录中”,这是我已经在做的。)
我确实将原始应用程序保存在自己的项目中,我可以返回并重新开始工作。当我开始进行更新时,我复制了整个目录,我想知道这是否可能是问题所在?我确实更改了包含所有 XCode 文件的目录的名称,并使用了 Project>Rename 函数。这会以某种方式产生这种效果吗?
应用程序(原始和更新)在 4.2 及更高版本上运行,如果这很重要的话。
解决方案:
我相信我已经解决了这个问题。就像我在问题开始时所说的那样,我将用户文件的完整路径保存在我的密钥文件中。显然,更新后的完整路径不能保证是相同的(我确信这在某处有记录,但我没有遇到过)。
因此,用户文件已被传输到更新的新文档目录,但我在旧的绝对路径中查找它们,即不在我的沙箱中。
通过在应用程序的 didFinishLaunching 中放置一个循环来提取文件路径的违规文件(我一直在本地寻找并且它仍然有效)并将它们切割成文件名,从而解决了这个问题。每当执行文件操作时,都必须以编程方式找到并添加文档路径。
对于它的价值,实际上对我有好处,因为重新安装原始版本并不能解决用户的问题,所以无法恢复到商店中以前的二进制文件,但我相信它有,至少最初是这样。我确实希望有一种方法可以禁止更新,但仍然允许新购买(因为问题不影响新购买)。不过,这种情况可能并不常见。
【问题讨论】:
-
天哪,确实如此。 :/ 我必须说,对此的任何远程帮助充其量只能是在黑暗中拍摄 - 祝你好运。
-
我花了一段时间才弄清楚这一点,但您的问题和回答刚刚证实了我的问题。谢谢。
-
当 iOS 从 7 升级到 8 时,我在一个应用中遇到了同样的问题。这是否意味着 iOS 会在升级时为所有具有不同十六进制名称的应用创建一个新目录?
-
@ohDear 谢谢你解释清楚的回答
标签: ios file-io filesystems