我的第一个应用程序更新昨晚刚刚上线,我得到一个投诉,更新导致用户创建的数据(其中一些)消失.我已经能够重现这个问题,但不知道为什么.
在Documents目录中,我保存了一个密钥文件,它告诉我所有用户文件的"标题"及其文件名(完整路径).然后,所有用户的文件也在Documents目录中.
当更新发生时,密钥文件仍然存在(至少,我认为这是因为数据显示在应用程序的第一个屏幕 - 应用程序完全退出并在更新后重新启动,对吧?),但是当用户尝试时导航到实际文件中,没有数据,用户输入的任何新数据永远不会保存.
当我意外地使用无效的文件名(其中包含不正确的字符)时,它的行为与调试时完全相同 - 它从未保存过.但是通过更新,这些文件已在旧版本中正确保存,但在新版本中以某种方式失败.
这是我的第一个应用程序和我的第一个更新,我在这里很茫然.我暂时从应用程序中取出应用程序(不知道你不能简单地恢复到旧版本!哎呀!)并且会非常感谢关于在哪里/如何查找问题以及如何编写的任何想法一个不会丢失数据的GOOD更新.(到目前为止,我发现的只是"在Documents目录中保存数据",这就是我已经在做的事情.)
我确实将原始应用程序保存在自己的项目中,我可以再次返回并继续工作.当我开始处理更新时,我复制了整个目录,我想知道这是否会出现问题?我确实更改了包含所有XCode文件的目录的名称,并使用了Project> Rename函数.这会有什么影响吗?
应用程序(原始版本和更新版本)在4.2及更高版本上运行,如果这很重要的话.
解析度:
我相信我已经找到了这个问题.就像我在问题开头附近说的那样,我在用户密钥文件中保存了用户文件的全部路径.显然,更新后的完整路径不保证是相同的(我确定这是在某处记录的,但我没有碰到它).
因此,用户文件HAD已被传输到更新的新文档目录,但我在旧的绝对路径中寻找它们,即不在我的沙箱中.
通过在应用程序的didFinishLaunching中放置一个循环来解决文件路径的违规文件(那个,我一直在本地寻找并且它仍在工作)并将它们切换到只有fileNAMES.每当执行文件操作时,都必须以编程方式找到并添加Documents路径.
对于它的价值,对我来说实际上很好的是没有办法在商店中恢复到以前的二进制文件,因为重新安装原始版本不会解决用户的问题,但我相信它至少有,至少原来.我确实希望有一种方法可以禁止更新,但仍允许新购买(因为问题不影响新购买).但是,可能不是一个普通的情况.