2012-08-30 71 views
0

升級到iOS 5的設備,現在應用程序崩潰。堅果... 這是一個相機應用程序。錄製視頻。我有一個playMovie程序來播放捕獲的視頻。該功能需要使用指向視頻文件的路徑(NSString)創建NSURL。但NSURL創建與exc_bad_access崩潰。 2晚試圖解決這個問題,沒有運氣。開始懷疑問題是xcode 3.2.5的舊版本。 這裏的片段......僅在IOS5上創建NSURL崩潰

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    { 
    /// after I verify that file type is movie .... 
    videoFilePath = [[info objectForKey:UIImagePickerControllerMediaURL] path]; 
    NSURL *url = [NSURL fileURLWithPath:videoFilePath]; 
    ... at this point the app crashes. 

ALREADY嘗試:
- 移動NSURL從創作PROC的playMovie內didFinishPickingMediaWithInfo(如上圖所示)。仍然崩潰。
- 添加isDirectory:NO]。仍然崩潰。
- 打印日誌路徑字符串路徑看起來很好(它不是空的或覆蓋)
- 註釋掉NSURL並只保存MOV文件而不玩它。工作正常。但我需要該網址才能播放電影。

設備日誌:

異常類型:EXC_BAD_ACCESS (SIGSEGV)

異常代碼:KERN_INVALID_ADDRESS at 0x10000010

控制檯消息:

數據格式化暫時不可用,以後會重新嘗試「繼續」。 (找不到dlopen的功能,所以它是不可能載入共享庫。)

---增加更多的細節(12年8月30日)---

videoFilePath在聲明的NSStringviewController.h。它有@property (retain,nonatomic),它是合成的。它不在任何地方分配,所以它被用作常量。上面的代碼片斷顯示媒體網址如何分配給videoFilePath(作爲常量,未分配)。
在此之後,我爲用戶打開UIActionSheet「播放電影」,或「保存電影」或「取消」(有一天會添加Youtube選項)。在操作表中,如果用戶選擇PlayMovie,我會調用(void)playMovie過程。在那個過程中,我聲明瞭使用存儲在videoFilePath中的路徑啓動它的* url對象。像一個魅力工作,直到升級到IOS 5. 我只是試圖在(void)viewDidLoad裏面預分配NSStringvideoFilePath,以便它使用分配而不是常量。但是這並沒有解決它。
我只是試着將XCODE升級到4.2。我不再收到msg「數據格式化程序暫時不可用」。但仍然與EXC_BAD_ACCESS崩潰。

謝謝!謝謝!謝謝!

+0

您能向我們展示如何保存videoFilePath及其發生崩潰時的值 – ahmad

+0

在上面添加了詳細信息。謝謝。 – CodePig

回答

0

顯然你是從NSURL對象中提取一個路徑,然後從該路徑創建一個新的NSURL對象。 fileURLWithPath:出於某種原因對該路徑不滿意。可能是因爲該路徑不符合RFC 1808,因此之前的路徑調用導致videoFilePath == nil。

但爲什麼要進行這種轉換?只需使用:

NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL]; 
+0

男人,我想你殺了它。現在只是無法測試,因爲我升級了xcode到4.2,並且它不會在ios 5上運行應用程序。所以我再次降級xcode來測試它(有趣的是,較老的xcode在IOS 5上工作)。但它看起來像你的解決方案將工作(建立和運行在舊的IOS就好)。我明天就能確認。非常感謝。 – CodePig

+0

只要添加評論,以防其他人遇到此問題...我仍然沒有解決,但問題不在於代碼。它涉及到編譯器,SDK等。經過多次重新安裝,我仍然可以得到它。應用程序凍結。控制檯說:「在本地找到libXcodeDebuggerSupport.dylib的副本,從遠程設備的內存中讀取,這可能會降低調試會話的速度。」仍在嘗試各種各樣的東西。我現在唯一的建議是不要升級到5.1.1,如果你在雪豹LEOPARD! – CodePig

+0

解決...忘了保留URL對象。因此,在playMovie過程中,當它試圖在該路徑上獲取電影時,該URL已經消失。一旦我添加了[url retain],該應用就可以工作。 – CodePig