我保存了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下?
答案 0 :(得分:2)
您永远不会在文档目录中存储文件的绝对URL。这是因为当您更新应用程序时,iOS会为该应用程序创建一个具有不同十六进制名称的新目录。 现在,您的绝对URL引用了错误的位置,并且不会返回正确的文件。
在应用更新期间保存的文件
当用户下载应用更新时,iTunes会在a中安装更新 新的app目录。然后它从旧的移动用户的数据文件 在删除旧的之前安装到新的app目录 安装。保证以下目录中的文件 在更新过程中保留:
<Application_Home>/Documents <Application_Home>/Library
虽然其他用户目录中的文件也可以移动,但是 更新后不应该依赖他们在场。
请参阅iPhoneOSProgrammingGuide了解详情