2016-03-21 204 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 :您可以在動畫之前禁用它,並在動畫完成塊中重新啓用它