【发布时间】:2017-01-19 08:07:28
【问题描述】:
这是一个奇怪的问题,因为有时代码可以正常工作,而有时它会崩溃。但最近它只是崩溃了。
我有一个从 uiview 获取的图像。我使用下面的捕获功能抓取图像,然后将图像发送到属性以转到 prepareForSegue 以发送到下一个视图控制器。返回图像时,代码会不断崩溃。我对其进行了调试,发现该属性肯定从 nil 变为包含图像,但是当它需要 segue 时它崩溃了。但是崩溃是在捕获功能中而不是在segue中。这很奇怪,因为图像被返回(调试器显示它)但捕获返回是崩溃不断发生的地方。崩溃发生在:
//This seems to be the main problem
return capturedImage
这是返回的 captureImage 的崩溃日志
Thread1: EXC_BAD_INSTRUCTION (code=EXC_1336_INVOP, subcode=0x0)
我在这条线上也遇到了崩溃,但不知何故崩溃停止了。我无法为这个添加崩溃日志,因为它停止了崩溃,但我不知道它为什么或如何停止
view!.layer.renderInContext(UIGraphicsGetCurrentContext()!)
有什么想法吗?
顺便说一句,我使用情节提要按钮来触发转场。
class MainController: UIViewController {
@IBOutlet weak var mainView: UIView!
var mainPic: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
}
//MARK: -Func to convert image in uiview to uiimage
//get image from UIView, render it for Retina compatibility, then return it as an UIImage
func captureAndRenderUIImageFromUIView(view:UIView?) -> UIImage {
UIGraphicsBeginImageContextWithOptions((view?.bounds.size)!, true, 0.0)
view!.drawViewHierarchyInRect(view!.bounds, afterScreenUpdates: true)
//I was also getting crashes on this line but they stopped??
view!.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let capuredImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//The return value is where the crash keeps happening
return capturedImage
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
self.mainPic = self.captureAndRenderUIImageFromUIView(mainView)
if segue.identifier == "toDetailController"{
let detailVC = segue.destinationViewController as! DetailController
detailVC.detailPic = self.mainPic!
}
}
}
}
这是它要去的视图
class DetailController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
var detailPic: UIImage?
override func viewDidLoad() {
super.viewDidLoad()
self.imageView.image = self.detailPic
}
}
【问题讨论】:
-
不要继续猜测。有什么错误?使用崩溃的准确和完整详细信息更新您的问题。
-
@maddy 哦,对了,我马上更新
-
@maddy 更新了,谢谢
-
错误应该更多。你能在调试器中重现崩溃吗?
-
我刚试过。当调试器到达崩溃线时,唯一显示的是我更新的崩溃线。调试器本身是空白的。