2013-04-08 183 views
1

我正在使用cocos2d在iPad應用程序上工作,並且試圖使從庫中選擇圖片或使用相機拍攝圖片以在應用程序內使用。我昨天和今天整天都在瘋狂地用google搜索,試着一起做一些上面的事情,但是我應該首先承認我並不知道自己在做什麼。presentViewController導致崩潰

我現在的工作方式是點擊當前的用戶圖像,它會彈出一個菜單,詢問您是否要從相機或圖庫上傳不同的圖片。選擇攝像頭調用以下(和庫版本基本相同):

- (void) onGetCameraImage 
{ 
    UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.allowsEditing = NO; 

    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    [imagePicker presentViewController:[CCDirector sharedDirector] animated:YES completion:NULL]; 
} 

當我嘗試和測試這個(採摘庫,當然,因爲模擬器不能做的攝像頭,是的,我的確打算實現了無攝像頭的檢查),我得到以下崩潰:

2013-04-07 19:21:50.248 prototype1[20897:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <UIImagePickerController: 0x9e87ac0>.' 

我認爲這是拍擊presentViewController電話,但我有一個可怕的時間試圖找出我在做什麼錯的,因爲所有的教程和stackoverflow的答案使用不推薦的模態函數調用!我懷疑我只是在我之前的代碼中做過各種瘋狂的BS?無論哪種方式,我不知道如何讓我的代碼工作。

很多這種代碼已經從堆棧溢出中收集到,所以我不能保證它的任何敏感性 - 我對iOS編碼非常陌生,基本上被拋入這個項目,我們只是試圖使其工作。請幫忙!

回答

1

是的,這裏似乎有些錯誤。爲了在實例化UIImagePickerController後達到目標,您通常希望當前的視圖控制器顯示圖像選擇器實例。飛機墜毀是發生監守:

  1. 你是在告訴imagepicker從Cocos2D中
  2. 提出一些該UIImagePickerController觀點甚至沒有在屏幕上又

你有一個視圖控制器的訪問?

如果是這樣,你可以簡單地做一些這樣的:

[self presentViewController:imagePicker animated:YES completion:nil]; 

其中selfUIViewController一些子類。

希望這會有所幫助!

+0

這是有道理的......我原以爲sharedDirector是的UIViewController的子類,所以我試圖用它作爲視圖控制器,I認爲。然而,我知道我不能只用self而不是imagePicker,因爲這是CCLayerColor的一個子類(如果我嘗試,xcode會大叫我)。我不知道我還能嘗試什麼? – dunvi 2013-04-08 03:03:20

+0

沒有等待。我交換了[CCDirector sharedDirector]和imagePicker,它的工作原理...現在我只是得到這個錯誤:'2013-04-07 20:05:31.678 prototype1 [23030:c07] ***由於未捕獲的異常'NSInvalidArgumentException' ,原因:'在iPad上,UIImagePickerController必須通過UIPopoverController'呈現,我知道這意味着什麼TT 感謝您的幫助! – dunvi 2013-04-08 03:06:47

+0

當然,讓我知道你是否有更多麻煩。與Cocos和UIKit的組合事情變得過於複雜:-) – 2013-04-08 03:39:16

-1

還有一件事,設置

imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera 

之前,你得檢查源類型是否可用。

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
UIImagePickerController *imagePicker = 
[[UIImagePickerController alloc] init]; 

imagePicker.delegate = self; 

imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 

imagePicker.allowsEditing = YES; 

[self presentModalViewController:imagePicker animated:YES]; 

[imagePicker release]; 

} 

else 
{ 
//..... 
} 
+0

謝謝!不過,我知道那件事,但我在代碼中留下了一條評論,以便將其納入考慮範圍,並且我終於明白了這一點。<。< – dunvi 2013-04-08 05:01:03

0

只是改變最後一行類似於下面

[imagePicker presentViewController: imagePicker animated:YES completion:nil];