-1

致命错误:在展开可选值时意外发现 nil

使用以下代码:

weak var previewBlurView : UIVisualEffectView?

func blurPreviewWindow() {
    if (self.previewBlurView == nil) {
        var blurEffect: UIVisualEffect
        blurEffect = UIBlurEffect.init(style: UIBlurEffectStyle.Dark)
        self.previewBlurView? = UIVisualEffectView(effect: blurEffect)
        self.previewView.addSubview(self.previewBlurView?)
        self.previewBlurView!.frame = self.previewView.bounds
    }

    self.previewBlurView?.alpha = 0.0
    UIView.animateWithDuration(0.2, delay: 0.0, options: [.BeginFromCurrentState, .CurveEaseOut], animations: {() -> Void in
        self.previewBlurView?.alpha = 1.0
    }, completion: { _ in })
}

我得到了在线崩溃:

self.previewView.addSubview(self.previewBlurView?)

笔记

事实证明,由于视图控制器实例的外部问题没有引用正确的实例,所有视图都为零。所以在这种情况下,self.previewBlurView 结果是 nil。

4

1 回答 1

4

删除?分配中的self.previewBlurView

self.previewBlurView = UIVisualEffectView(effect: blurEffect)

否则会发生的情况是,分配仅在self.previewBlurView实际上nil不是开始时才发生,这不是因为您正在为它分配某些东西。

比较以下内容:

var a : Int? = 12
a? = 13
print(a)

var b : Int?
b? = 13
print(b)

哪个打印

可选(13)

分配b? = 13只有在b不是nil不幸的情况下才会发生。

于 2016-02-12T18:37:26.450 回答