UIImagePickerControllerSourceTypeCamera在IPHONE模拟器中崩溃了?

时间:2011-02-23 15:25:33

标签: iphone cocoa-touch ios4 uiimagepickercontroller

如果您尝试使用Camera作为源类型测试UIImagePickerController,那么模拟器是否会崩溃?

这是一个众所周知的问题吗?

我有以下代码:

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-exception-throw 错误@ - [UIImagePickerController setSourceType:]。

现在,如果我将源类型设置为照片库,那么一切都运行顺畅而且很好吗?这是什么交易?

1 个答案:

答案 0 :(得分:10)

模拟器没有相机,无法模拟拍照(使用isight会很好,但Apple并不是那么友善)。但是,您的代码不安全,因为例如旧的ipod touch没有相机,在这种情况下,您的应用程序将在此设备上崩溃。

正如Apple在UIImagePickerController documentation中建议的那样:

  

使用图像选择器控制器   包含其默认控件,   执行以下步骤:

     

1.验证设备是否能够从中挑选内容   期望的来源。这样称呼   isSourceTypeAvailable:类方法,   提供一个常数   “UIImagePickerControllerSourceType”   枚举。

     

2.检查您所使用的源类型可用的媒体类型   使用,通过调用   availableMediaTypesForSourceType:   类方法。这让你   区分可以的相机   用于视频录制和一个   只能用于静止   图像。

     

3.Tell图像选择器控制器根据调整UI   您要制作的媒体类型   可用 - 静止图像,电影或   两者 - 通过设置mediaTypes   属性。

     

4.通过调用来显示用户界面   presentModalViewController:动画:   当前活动视图的方法   控制器,传递您的配置   图像选择器控制器作为新的   查看控制器。

     

5.当用户点击按钮选择新拍摄或保存的图像时   或电影,或取消操作,   使用你的。解雇图像选择器   委托对象。对于新捕获的   媒体,您的代表可以保存它   到设备上的相机胶卷。对于   以前保存的媒体,您的代表   然后可以使用图像数据   达到您应用的目的。

所以你必须调用isSourceTypeAvailable并一致地设置你的sourceType。