在给 subview 添加模糊效果时出现错误:
unexpectedly found nil while unwrapping an Optional value
第一次它工作正常,如果我第二次尝试它给出上述错误。
网点:
@IBOutlet var mesgText_view: UIView!
var blurEffectView: UIVisualEffectView!
代码:
func OpenSubMesgView(_ sender : UIButton) {
print(sender.tag)
print("ARRAY VALUES FROM CELL",totlObservationArray.object(at: sender.tag))
mesgText_view.alpha = 1
var blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)
blurEffectView.addSubview(mesgText_view)
}
@IBAction func closeMesgview(_ sender:UIButton) {
mesgText_view.alpha = 0;
self.blurEffectView.removeFromSuperview()
}
最佳答案
self.blurEffectView.removeFromSuperview()
我猜测 this 和/或 mesgText_view
指的是一个 socket ,像这样声明为弱:
@IBOutlet weak var blurEffectView: UIVisualEffectView!
如果没有对弱变量的强引用,弱变量将被设置为 nil。如果你从它的父 View 中删除一个弱持有的 View ,它将被设置为 nil 并且下次你尝试引用它时,你的应用程序将会崩溃。
您的代码第一次运行时,它会从其父 View 中删除一些弱导出。因为它是一个弱属性,所以没有其他东西引用它,它被设为 nil。你的代码第二次运行时,它访问了现在是 nil 隐式解包可选的导出,导致你的崩溃。
您还可以通过从声明中删除 weak
关键字来使导出成为强引用。这将允许您将它从其 super View 中删除而不会被取消。
关于ios - 在展开可选值时意外发现 nil,同时删除模糊背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46441886/