我的应用捆绑了两个预装的视频,用户可以通过应用内购买购买更多。应用程序升级后未找到资源文件?
每个视频节目是用称为_videoFilePath
(属性NSString* videoFilePath
)伊娃
当视频下载完成后,文件路径被适当地设定物镜-C的对象。对于预装的情节,它在启动时设置一次使用这样的代码:
NSString* fileName = [NSString stringWithFormat:@"Chapter_%03d", _episodeNumber];
self.videoFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"m4v"];
(集元数据是从第一次运行捆绑的.plist初始化,并的.plist的副本保存在/ Documents和这是因为元数据是可读写的,但捆绑的资源是只读的)
我注意到有些用户在升级我的应用后可以播放预装的视频。目前我正在研究这个问题,所以我从设备中删除了应用程序,安装了1.0版本(来自Xcode-> Run),存档版本1.1作为AdHoc并安装在顶层。 正如所料,预装的剧集不会播放。
因此,这次我从Xcode构建/运行1.1版本的AdHoc安装,启用了一些断点。
购买(下载)的剧集保存到缓存中,因此存在有效的文件路径不足以保证播放(可能会被系统删除)。所以我用NSFileMananger
来检查文件是否试图播放之前就存在,使用如下代码:
if (_videoFilePath) {
// Video File Path is Set...
if ([[NSFileManager defaultManager] fileExistsAtPath:_videoFilePath]) {
// ...and file exists in system;
// Can Play:
return YES;
}
else{
// ...but file has been deleted, possibly as a result of a
// restore from iTunes backup;
// Can Not Play:
return NO;
}
}
断点透露,fileExistsAtPath:
测试失败;然而控制台显示的值为_videoFilePath
为:
/var/mobile/Applications/CEAA80EF-A85F-4C60-929D-9BA18E8D1702/[App Name]/Chapter_001.m4v
那么,什么给了?
注意:删除应用程序并重新安装版本1.1似乎可以解决此问题。 只有在1.0之上升级到1.1时,该错误才会显现。
附录
思想的第二个后(写下来的东西确实帮助),我想我已经想通了。资源的文件路径是在1.0版的第一次运行时获得的,并与其余元数据一起保存在/ Documents文件夹中。在升级时,我假定应用程序路径的“随机数字,字母和连字符”部分更改为其他内容,因此版本1.0中的“硬编码”路径变成了一个损坏的URL。必须在v1.0和v1.1上NSLog完整路径来证实这一点,但我想我已经明白了。 答案和评论仍然受欢迎。