【问题标题】:Using presentModalViewController with UIImagePickerController causing Crash on iOS 5将 presentModalViewController 与 UIImagePickerController 一起使用会导致 iOS 5 崩溃
【发布时间】:2012-02-19 15:33:02
【问题描述】:

使用 presentModalViewController 和 UIImagePickerController 导致 iOS 5 崩溃(在版本

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if(version < 5) 
        imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    else                        
        imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        //imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

    [self presentModalViewController:imgPicker animated:YES];

【问题讨论】:

  • 在使用 iOS 5 时会在此行崩溃:[self presentModalViewController:imgPicker animated:YES];
  • 崩溃消息/异常信息是什么?
  • 我也有同样的问题(iOS5、iPad、Landscape)。展示 UIImagePickerControllerSourceTypeCamera 工作得很好,但 UIImagePickerControllerSourceTypePhotoLibrary 和 UIImagePickerControllerSourceTypeSavedPhotosAlbum 不行。您找到解决方案了吗?
  • 我发现另一篇帖子说你呈现的UIImagePickerController 应该作为变量存储在呈现类中,以防止它被过早释放。不幸的是,这对我没有帮助......
  • 这解决了我在 iPad 上的问题。它确实需要创建为弹出框:stackoverflow.com/questions/9015155/…

标签: objective-c ios5 xcode4.2 uiimagepickercontroller


【解决方案1】:

来自官方文档:

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

  1. 验证设备是否能够从所需的来源中挑选内容。执行此操作调用 isSourceTypeAvailable: 类方法,提供来自“UIImagePickerControllerSourceType”枚举的常量。

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

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

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

    在 iPad 上,使用弹出框呈现用户界面。仅当图像选择器控制器的 sourceType 属性设置为 UIImagePickerControllerSourceTypeCamera 时,这样做才有效。要使用 popover 控制器,请使用 UIPopoverController 类参考中“Presenting and Dismissing the Popover”中描述的方法。

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

也许第 4 点引起了麻烦。

【讨论】:

  • 它在说 "EXC_BAD_ACCESS" ,如果我将源类型更改为跟随,它工作正常,感谢您的回复; imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
  • 我什至尝试了这行代码但仍然无法正常工作,不知道为什么:( :: [self presentViewController:imgPicker animated:YES completion:^{NSLog(@"Photo Albums Presented"); }];
  • 您是在 iPad 还是 iPhone 上进行测试?因为在 iPad 上,UIImagePickerController 必须通过 UIPopoverController 呈现
  • 谢谢,但我正在使用带有 iOS 5 的 iPhone 并且代码无法正常工作,知道如何让它工作吗?感谢您的持续回复。
  • 现在已解决,非常感谢您的帮助,我错过了您上面提到的步骤之一。
猜你喜欢
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多