2011-02-23 100 views
1

這是一個已知的問題,如果您嘗試使用相機作爲源類型來測試您的UIImagePickerController,那麼模擬器會崩潰?UIImagePickerControllerSourceTypeCamera在IPHONE模擬器中崩潰?

我有以下代碼:

self.imgPicker = [[UIImagePickerController alloc] init]; 
self.imgPicker.allowsEditing = NO; 
self.imgPicker.delegate = self; 
[self.imgPicker setSourceType:UIImagePickerControllerSourceTypeCamera]; 
[self presentModalViewController:self.imgPicker animated:YES]; 
[imgPicker release]; 

在模擬器中運行,我得到堆棧@一objc的異常擲錯誤 - [的UIImagePickerController setSourceType:]。

現在,如果我將源類型設置爲照片庫,但一切都運行順利和罰款?這是怎麼回事?

回答

10

模擬器沒有相機,也無法模擬拍照(使用isight會很好,但Apple沒有這麼好)。然而,你的代碼是不安全的,因爲,例如,舊的iPod touch沒有相機,在這種情況下,你的應用程序將崩潰在這個設備上。

作爲蘋果建議在UIImagePickerController documentation

要使用的圖像選擇器控制器 包含其默認控件, 執行以下步驟:

1.Verify該裝置能夠從採摘內容的 所需的來源。是否這樣調用 isSourceTypeAvailable:類方法 從 「UIImagePickerControllerSourceType」 enum提供了一個常量。

2.檢查哪些媒體類型是可用的,因爲你是 使用,通過調用 availableMediaTypesForSourceType源類型: 類方法。這可以讓您 區分可以使用 進行視頻錄製的相機和僅可用於仍然使用 圖像的一個 。

3.Tell圖片選擇器控制器,根據你想同時,通過設置mediaTypes 屬性,以使 可供靜態圖像,電影,或 的 媒體類型調整UI。

4.Present通過調用 presentModalViewController用戶界面:動畫:當前活動視圖 控制器 方法,傳遞您的配置 圖片選擇器控制器作爲新 視圖控制器。

5.當用戶點擊一個按鈕,選擇一個新捕獲的或保存的圖像 或電影,或取消操作, 使用 委託對象駁回圖像拾取。對於新拍攝的 媒體,您的代表可以將其 保存到設備上的相機膠捲。對於以前保存的 媒體,您的代理 可以根據您的應用的用途使用 的圖像數據。

所以你必須打電話isSourceTypeAvailable並設置你的源類型一致。

+0

所以答案是肯定的,它確實在模擬器崩潰,因爲它沒有攝像頭:)在iPhone上進行測試很好。對於源碼類型測試有所瞭解,但是如果您打算將您的應用專用於相機設備,是否真的有必要? – 2011-02-23 16:21:35

+0

我認爲你可以在你的info.plist中使用'still-camera'鍵來指定必需的設備功能。但我強烈建議你去做這個檢查,因爲正如文件中所說的關於isSourceTypeAvailable方法「如果相機已經在使用中,這個方法返回NO」......這意味着如果你的設備有一個相機,這並不意味着你可以在任何時候使用它。因此,輕輕處理錯誤,您的用戶將會感謝您 – 2011-02-23 22:00:16

+0

但isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera返回YES。仍然在模擬器上崩潰。 – shiami 2013-05-10 02:14:27