2013-04-08 181 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];