2011-02-23 141 views
1

这是一个已知的问题,如果您尝试使用相机作为源类型来测试您的UIImagePickerController,那么模拟器会崩溃?UIImagePickerControllerSourceTypeCamera在IPHONE模拟器中崩溃?

我有以下代码:

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的异常掷错误 - [的UIImagePickerController setSourceType:]。

现在,如果我将源类型设置为照片库,但一切都运行顺利和罚款?这是怎么回事?

回答

10

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

作为苹果建议在UIImagePickerController documentation

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

1.Verify该装置能够从采摘内容的 所需的来源。是否这样调用 isSourceTypeAvailable:类方法 从 “UIImagePickerControllerSourceType” enum提供了一个常量。

2.检查哪些媒体类型是可用的,因为你是 使用,通过调用 availableMediaTypesForSourceType源类型: 类方法。这可以让您 区分可以使用 进行视频录制的相机和仅可用于仍然使用 图像的一个 。

3.Tell图片选择器控制器,根据你想同时,通过设置mediaTypes 属性,以使 可供静态图像,电影,或 的 媒体类型调整UI。

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

5.当用户点击一个按钮,选择一个新捕获的或保存的图像 或电影,或取消操作, 使用 委托对象驳回图像拾取。对于新拍摄的 媒体,您的代表可以将其 保存到设备上的相机胶卷。对于以前保存的 媒体,您的代理 可以根据您的应用的用途使用 的图像数据。

所以你必须打电话isSourceTypeAvailable并设置你的源类型一致。

+0

所以答案是肯定的,它确实在模拟器崩溃,因为它没有摄像头:)在iPhone上进行测试很好。对于源码类型测试有所了解,但是如果您打算将您的应用专用于相机设备,是否真的有必要? – 2011-02-23 16:21:35

+0

我认为你可以在你的info.plist中使用'still-camera'键来指定必需的设备功能。但我强烈建议你去做这个检查,因为正如文件中所说的关于isSourceTypeAvailable方法“如果相机已经在使用中,这个方法返回NO”......这意味着如果你的设备有一个相机,这并不意味着你可以在任何时候使用它。因此,轻轻处理错误,您的用户将会感谢您 – 2011-02-23 22:00:16

+0

但isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera返回YES。仍然在模拟器上崩溃。 – shiami 2013-05-10 02:14:27