Jim*_*ery 9 nsnotificationcenter swift
我有一个带按钮的视图控制器.按下按钮时,会添加一个观察者,如下所示:
func buttonPress(sender:UIButton){
NSNotificationCenter.defaultCenter().addObserverForName("buttonPressEvent", object:nil, queue:nil, usingBlock:{(notif) -> Void in
// code
})
}
Run Code Online (Sandbox Code Playgroud)
当我关闭此视图控制器,然后返回到它并按下按钮时,//code
执行两次.如果我离开并再次回来,//code
则执行三次,依此类推.
我想要做的是在我再次添加之前删除Observer,因此这段代码不会执行两次.我已经浏览了这里的文档,并在我添加Observer的地方添加了这行代码:
NSNotificationCenter.defaultCenter().removeObserver(self, name:"buttonPressEvent", object:nil)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
谁能告诉我哪里出错了?
Mik*_*ard 29
当您使用基于"块"的方法来观察通知时self
,实际上并不是观察者.该函数返回一个充当观察者的对象:
func addObserverForName(_ name: String?,
object obj: AnyObject?,
queue queue: NSOperationQueue?,
usingBlock block: (NSNotification!) -> Void) -> NSObjectProtocol
Run Code Online (Sandbox Code Playgroud)
您需要保留对此返回对象的引用,并在调用时将其作为观察者传入 removeObserver
它在苹果文档很好地解释这里
归档时间: |
|
查看次数: |
8155 次 |
最近记录: |