问题与NSSearchPathForDirectoriesInDomains和持久性数据

如上所示,我们使用下面的代码来检索用户文档的path

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; 

我们得到以下path作为结果:/ var / mobile / Applications / 3E3C1F45-6649-4EA3-93FD-CDB802E346EC / Documents /

在所述path中,我们保存所有用户的持久数据。

我们遇到了一些从应用程序商店升级应用程序版本的用户遇到的问题,持久数据没有渴望读取,也许path改变,也许在新版本中使用新的GUID。

由于这种情况只发生在app store更新之后,因此testing和debugging这个问题的能力有限。

当用户升级应用程序时,标识符(3E3C1F45-6649-4EA3-93FD-CDB802E346EC)可以更改,但应该将文档和高速caching复制到旧的目录中。

有没有机会保存您的持久数据的ABSOLUTEpath,并试图加载文件时使用它? 您应该只在文档目录中保存文件名和目录名称,并且每次加载资源时(或者至less在启动时)通过追加由NSSearchPathForDirectoriesInDomain返回的path来生成完整path

换句话说,不要保存PATHS如

/var/mobile/Applications/3E3C1F45-6649-4EA3-93FD-CDB802E346EC/Documents/MyDirectory/MyFile.txt

而是保存:

/MyDirectory/MyFile.txt

并将其追加到NSSearchPathForDirectoriesInDomain在运行时返回的任何内容。