UIImagePickerControllerSourceTypeCamera在IPHONE模拟器中崩溃了?

skå*_*fan 1 iphone cocoa-touch uiimagepickercontroller ios4

是否已知问题如果您尝试使用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];
Run Code Online (Sandbox Code Playgroud)

在模拟器中运行它,我在堆栈上得到一个objc-exception-throw错误@ - [UIImagePickerController setSourceType:].

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

Luc*_*rdi 10

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

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

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

1.验证设备是否能够从所需的源中挑选内容.这样做是调用isSourceTypeAvailable:class方法,从"UIImagePickerControllerSourceType"枚举中提供一个常量.

2.通过调用availableMediaTypesForSourceType:class方法,检查您正在使用的源类型可用的媒体类型.这使您可以区分可用于视频录制的摄像机和仅可用于静止图像的摄像机.

3.通过设置mediaTypes属性,调整图像选择器控制器以根据要提供的媒体类型(静止图像,电影或两者)调整UI.

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

5.当用户点击按钮以选择新捕获或保存的图像或电影,或取消操作时,使用您的委托对象关闭图像选择器.对于新捕获的媒体,您的代表可以将其保存到设备上的相机胶卷.对于以前保存的媒体,您的代理人可以根据您应用的目的使用图像数据.

所以你必须isSourceTypeAvailable一致地调用和设置你的sourceType.