2016-06-12 158 views
0

我有一個視圖,它有一個下拉菜單作爲子視圖。現在,當視圖被釋放時,我正在收到一個錯誤。 「被釋放,而鍵值觀察家仍用它註冊」從子視圖刪除觀察者

在視圖類我設置的觀察者:

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    self.setNeedsDisplay() 
    if keyPath == "frame" { 
     // Set up DropdownMenu 
     self.dropDownBackground.frame.size.height = self.dropDownMenu.frame.maxY 
    } 
} 

並將其添加到子視圖:

dropDownMenu.addObserver(self, forKeyPath: "frame", options: .New, context: nil) 

所以要避免我想要做的錯誤:

deinit { 
    dropDownMenu.removeObserver(self) 
} 

但編譯器告訴我「不能invok e'removeObserver'與參數列表'DropDownMenu'「

我在做什麼錯?謝謝!

回答

1

有一個look at the documentation:該方法被稱爲removeObserver(_ observer: NSObject, forKeyPath keyPath: String)。所以你需要做的:

dropDownMenu.removeObserver(self, forKeyPath: "frame") 
+0

我明白了!非常感謝!我讀的是object.removeObserver(anotherObject)會刪除給定對象的所有觀察者連接。我猜這是錯誤的。再次感謝! – weka1