ios - 在展开可选值时意外发现 nil,同时删除模糊背景

标签 ios swift blur subview

在给 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/

相关文章:

ios - 如何以编程方式更改 tabbarItem 的图像

ios - 解除分配旧 UIVIewController 的 UIStoryboard segue

xcode - Swift - println 不打印到控制台

jquery - 帮助 jquery 中的焦点/模糊语义

ios - GPUImage 多个实时视频

ios - 圆形 ImageView iOS 8/Xcode 6

jquery - iOS 地址栏固定在视口(viewport)错误的顶部

ios - Swift转义 block 声明

jQuery sibling 和 $(this) 模糊和焦点

html - CSS - 如何使单词的结尾变得模糊?