谢谢你看我的帖子。
所以在image!.drawInRect(rect!)
线上,我得到EXC_BAD_ACCESS代码1错误,我不能弄清楚我的生活。我在Run Scheme中启用了僵尸,没有打印出来(也许我也做错了?),我有println()似乎我所有的变量,没有什么是nil。
我想要注意的是,这段代码工作了两次,然后在第三次调用时失败,大多数时候。在我的应用程序中,你拍了一张照片,然后它带你编辑图片(当这个函数被调用时)。当我回到我的相机拍照,并返回编辑它(在第三次),我得到这个错误。
同样,这个方法在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!
}
解决了!
我的功能被过度设计了。一个简单的return UIImage(CIImage: cIImage)!
解决了我的问题,并取代了上面所有的代码。这就是我在网上复制代码的后果!教训。谢谢你的帮助!
由于问题行强制展开两个可选选项,可能您正在展开一个nil(这会生成错误)。尝试使用可选绑定来安全展开:
if let safeRect = CGRect(origin: CGPointZero, size: size),
let safeImage = UIImage(CIImage: filteredImageView.filter.outputImage)
{
safeImage.drawInRect(safeRect)
}
这样,如果CGRect
实例或UIImage
实例的构建失败,大括号内的行将不会被执行。