从子视图中移除观察者
Remove observer from subview
我有一个视图,它有一个下拉菜单作为子视图。现在我收到一个错误,当视图被释放时。 "was deallocated while key value observers were still registered with it"
在视图class中我正在设置观察者:
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)
}
但是编译器告诉我"Cannot invoke 'removeObserver' with an argument list of 'DropDownMenu'"
我做错了什么?谢谢!
有一个look at the documentation:方法叫做removeObserver(_ observer: NSObject, forKeyPath keyPath: String)
。所以你需要做:
dropDownMenu.removeObserver(self, forKeyPath: "frame")
我有一个视图,它有一个下拉菜单作为子视图。现在我收到一个错误,当视图被释放时。 "was deallocated while key value observers were still registered with it"
在视图class中我正在设置观察者:
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)
}
但是编译器告诉我"Cannot invoke 'removeObserver' with an argument list of 'DropDownMenu'"
我做错了什么?谢谢!
有一个look at the documentation:方法叫做removeObserver(_ observer: NSObject, forKeyPath keyPath: String)
。所以你需要做:
dropDownMenu.removeObserver(self, forKeyPath: "frame")