重新安装应用程序后,NSBundle文件引用丢失

时间:2012-12-13 04:03:01

标签: objective-c ios nsurl nsbundle testflight

我保存了NSUserDefaults中音频文件的用户首选项,其中包含如下所示的网址:

soundURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audioFile1.m4r", [[NSBundle mainBundle] resourcePath]]];

随后如下检索该偏好:

self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:self.audioURL error:&error];

这很有效,直到最近应用程序通过TestFlight进行adhoc部署进行beta测试时我才遇到麻烦。现在,在重新安装应用程序时,声音无法播放。日志记录显示路径依赖于使用新安装更改的GUID(或等效项):

file://localhost/var/mobile/Applications/D74D8B09-5B27-4EF9-A344-68304CFE5549/myApp.app/audioFile1.m4r

存储在首选项中,但在后续安装中构建的URL为:

file://localhost/var/mobile/Applications/5F607CD7-6E32-45F0-9897-0DDBACBDD6B0/myApp.app/audioFile1.m4r

所以我的问题是:我做错了吗?如果是这样,那么正确的方法是什么?为什么这只发生在TestFlight下?

1 个答案:

答案 0 :(得分:2)

您永远不会在文档目录中存储文件的绝对URL。这是因为当您更新应用程序时,iOS会为该应用程序创建一个具有不同十六进制名称的新目录。 现在,您的绝对URL引用了错误的位置,并且不会返回正确的文件。

  

在应用更新期间保存的文件

     

当用户下载应用更新时,iTunes会在a中安装更新   新的app目录。然后它从旧的移动用户的数据文件   在删除旧的之前安装到新的app目录   安装。保证以下目录中的文件   在更新过程中保留:

<Application_Home>/Documents

<Application_Home>/Library
     

虽然其他用户目录中的文件也可以移动,但是   更新后不应该依赖他们在场。

请参阅iPhoneOSProgrammingGuide了解详情