0

感谢您查看我的帖子。

所以在网上image!.drawInRect(rect!),我得到 EXC_BAD_ACCESS Code 1 错误,我一辈子都想不通。我在运行方案中启用了 Zombies,但没有打印出来(也许我也做错了?),我的 println() 似乎是我所有的变量,没有什么是零。

我想指出,这段代码工作了两次,然后第三次调用失败,大部分时间。在我的应用程序中,你拍照,然后它需要你编辑图片(当这个函数被调用时)。当我回到相机拍照并返回编辑(第三次)时,出现此错误。

此外,此方法在viewDidAppear()

任何帮助表示赞赏。我要拔头发了!

       var rect: CGRect?
    var image: UIImage?
func convertCIImageToUIImage(cIImage: CIImage) -> UIImage {

    println(cIImage)

    let size: CGSize = filteredImageView.inputImage.size
    println(filteredImageView.inputImage.size)

    UIGraphicsBeginImageContext(size)

    rect = CGRect(origin: CGPointZero, size: size)
    image = UIImage(CIImage: filteredImageView.filter.outputImage)

    println(UIGraphicsGetCurrentContext())
    println("size: \(size)")
    printAllObjects()
    println()

    image!.drawInRect(rect!)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    image = nil
    rect = nil

    let finalImage = UIImage(CGImage: newImage.CGImage!, scale: 1.0, orientation: UIImageOrientation.Right)
    return finalImage!
}
4

2 回答 2

3

解决了!

我的功能被一个远射过度设计了。一个简单的return UIImage(CIImage: cIImage)!解决了我的问题并替换了上面的所有代码。这就是我在网上复制代码所得到的!学过的知识。谢谢您的帮助!

于 2015-09-14T16:02:10.417 回答
2

由于有问题的行强制解包两个选项,因此您可能正在解包 nil (这会产生错误)。尝试使用可选绑定来安全展开:

if let safeRect = CGRect(origin: CGPointZero, size: size),
   let safeImage = UIImage(CIImage: filteredImageView.filter.outputImage)
{
   safeImage.drawInRect(safeRect)
}

这样,如果CGRect实例或UIImage实例的构造失败,则不会执行大括号内的行。

于 2015-09-14T14:38:52.713 回答