我的應用捆綁了兩個預裝的視頻,用戶可以通過應用內購買購買更多。應用程序升級後未找到資源文件?
每個視頻節目是用稱爲_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完整路徑來證實這一點,但我想我已經明白了。 答案和評論仍然受歡迎。