如果您尝试使用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:]。
现在,如果我将源类型设置为照片库,那么一切都运行顺畅而且很好吗?这是什么交易?
答案 0 :(得分:10)
模拟器没有相机,无法模拟拍照(使用isight会很好,但Apple并不是那么友善)。但是,您的代码不安全,因为例如旧的ipod touch没有相机,在这种情况下,您的应用程序将在此设备上崩溃。
正如Apple在UIImagePickerController documentation中建议的那样:
使用图像选择器控制器 包含其默认控件, 执行以下步骤:
1.验证设备是否能够从中挑选内容 期望的来源。这样称呼 isSourceTypeAvailable:类方法, 提供一个常数 “UIImagePickerControllerSourceType” 枚举。强>
2.检查您所使用的源类型可用的媒体类型 使用,通过调用 availableMediaTypesForSourceType: 类方法。这让你 区分可以的相机 用于视频录制和一个 只能用于静止 图像。
3.Tell图像选择器控制器根据调整UI 您要制作的媒体类型 可用 - 静止图像,电影或 两者 - 通过设置mediaTypes 属性。
4.通过调用来显示用户界面 presentModalViewController:动画: 当前活动视图的方法 控制器,传递您的配置 图像选择器控制器作为新的 查看控制器。
5.当用户点击按钮选择新拍摄或保存的图像时 或电影,或取消操作, 使用你的。解雇图像选择器 委托对象。对于新捕获的 媒体,您的代表可以保存它 到设备上的相机胶卷。对于 以前保存的媒体,您的代表 然后可以使用图像数据 达到您应用的目的。
所以你必须调用isSourceTypeAvailable
并一致地设置你的sourceType。