2012-08-28 97 views
0

我的應用捆綁了兩個預裝的視頻,用戶可以通過應用內購買購買更多。應用程序升級後未找到資源文件?

每個視頻節目是用稱爲_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完整路徑來證實這一點,但我想我已經明白了。 答案和評論仍然受歡迎。

回答

0

因此,當我意識到經過一番思考後,捆綁資源的完整路徑似乎在應用程序的每次升級時都會略有變化;具體來說,就是「Long,自動生成隨機數字和字母串」的中間目錄。我的錯誤是在第一次安裝時保存(即硬編碼)路徑,並在升級應用程序後使用該值。 我解決了它沒有緩存的路徑,而是使用

-pathForResource:ofType: 

每次。