2016-03-21 250 views
1

我创建了自己滑出导航菜单,但致命的错误,当我点击一个链接菜单上很多,它会导致一个错误:view.removeFromSuperview()在很多水龙头

fatal error: unexpectedly found nil while unwrapping an Optional value

这是对的滑动屏幕动画:

func animateLeftPanel(shouldExpand shouldExpand: Bool) { 
    if (shouldExpand) { 
     currentState = .LeftPanelExpanded 

     animateCenterPanelXPosition(targetPosition: CGRectGetWidth(centerNavigationController.view.frame) - centerPanelExpandedOffset) 
    } else { 
     animateCenterPanelXPosition(targetPosition: 0) { finished in 
      self.currentState = .BothCollapsed 

      self.leftViewController!.view.removeFromSuperview() 
      self.leftViewController = nil; 
     } 
    } 
} 

self.leftViewController!.view.removeFromSuperview()行了,我不明白为什么我得到这个错误,以及如何解决它。

+1

测试'self.leftViewController'是否已经是零而不是使用强制'!'? –

+0

@PhillipMills它不是零,我不明白,如果我点击一次它的工作原理,但如果我点击很多物品它会崩溃 – Ben

+0

@PhillipMills我刚刚删除了它看起来工作的线 – Ben

回答

0

尝试:

func animateLeftPanel(shouldExpand shouldExpand: Bool) { 
    if (shouldExpand) { 
     currentState = .LeftPanelExpanded 

     animateCenterPanelXPosition(targetPosition: CGRectGetWidth(centerNavigationController.view.frame) - centerPanelExpandedOffset) 
    } else { 
     animateCenterPanelXPosition(targetPosition: 0) { finished in 
      self.currentState = .BothCollapsed 

      if let view = self.leftViewController!.view { 
       view.removeFromSuperview() 
       self.leftViewController = nil 
      } 
     } 
    } 
} 

检查也是你的动画块并牢记你也可以动画之前这样做是为了防止动画期间水龙头:

self.leftViewController.view.userInteractionEnabled = false 

,并在动画完成块:

self.leftViewController.view.userInteractionEnabled = true 

同样的事情,如果你使用一个按钮来展开leftViewController.view :您可以在动画之前禁用它,并在动画完成块中重新启用它