呈现 UIImagePickerController 后应用程序崩溃

Posted

技术标签:

【中文标题】呈现 UIImagePickerController 后应用程序崩溃【英文标题】:app crashes after presenting an UIImagePickerController 【发布时间】:2014-08-29 08:30:31 【问题描述】:

我正在尝试展示 UIImagePickerController 以从相册中获取图像,但我遇到了一种奇怪的行为。

如果我在 viewDidLoad 中启动图像选择器,它会起作用:

class CaptureImageViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate 

@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() 
    super.viewDidLoad()
    initPicker()


func initPicker() 
    let picker = UIImagePickerController()
    picker.delegate = self
    picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    presentViewController(picker, animated: true, completion: nil)


func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]!) 
    dismissViewControllerAnimated(true, completion: nil)
    imageView.image = info["UIImagePickerControllerOriginalImage"] as UIImage


func imagePickerControllerDidCancel(picker: UIImagePickerController!) 
    dismissViewControllerAnimated(true, completion: nil)



但是,如果我将 initPicker() 变成 @IBAction 并从按钮调用它,点击它后,图像选择器会出现,但应用程序突然崩溃出现此错误:

CaptureImageViewController respondsToSelector:]: message sent to deallocated instance 0x7960b1e0

我正在使用 XCode Beta 6 开发模拟器

有什么想法吗?

【问题讨论】:

您能发布带有 IBAction 的代码吗? @Akaino,代码完全相同,但 initPicker()viewDidLoad() 消失了。此外,initPicker() 函数定义变为 @IBAction func initPicker()... 【参考方案1】:

尝试将 UIImagePickerController 的对象声明为 Instance 级别的参数,而不是在函数中。

【讨论】:

【参考方案2】:

在测试了一堆不同的方法都没有成功后,我更改了函数签名并且......它有效!

init 前缀似乎让 Swift 感到困惑。

我正在论坛和官方文档中寻找一些相关主题,但我没有得到任何东西。

可能是一个错误?

【讨论】:

以上是关于呈现 UIImagePickerController 后应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

摄像头拍照上传

如何从 webview 使用 UIImagePickerController

iPhone OS 3.0 中的 UIImagePickerController

iOS开发——打开手机相册,获取图片

如何使用 iphone 中的核心数据将图像存储到 sqlite? [复制]

在已经呈现的表单上呈现模态视图