1、创建通知,最好在viewDidLoad的方法中创建
override func viewDidLoad() {
super.viewDidLoad()
let center = NSNotificationCenter.defaultCenter()//创建通知
center.addObserver(self, selector: #selector(SecondViewController.receiveValue(_:)), name: "passValue", object: nil)//单个值得传递
center.addObserver(self, selector: #selector(SecondViewController.receive(_:)), name: "pass", object: nil)//多个值得传递
}
//接收通知并相应的方法
//单个值得回调方法
func receiveValue(info:NSNotification) {
print(info.object)
}
//多个值得回调方法
func receive(info:NSNotification) {
print(info.userInfo)
let dic = info.userInfo as! NSDictionary
print(dic.objectForKey("name"))
print(dic.objectForKey("sex"))
print(dic.objectForKey("age"))
}
2、发送通知
//通知中心传值
//----------单值传递 -------
let center = NSNotificationCenter.defaultCenter()
center.postNotificationName("passValue", object: "value", userInfo: nil)
//-----------多个值得传递-------
let dic :[String : NSObject] = [
"name":"张三",
"sex" : "男",
"age" : "17"
]
center.postNotificationName("pass", object: nil, userInfo: dic)
3、移除通知,由那个控制器创建由那个控制器移除,谁创建谁移除,最好在deinit方法中移除,如果通知不能及时的移除掉,当下次进入该控制器时会重复创建NSNotificationCenter,在对应方法中发送通知给上一次创建的通知,但是上一个通知所在的控制器已被干掉,所以这时候就会报错
deinit{
//移除所有的通知(在哪里创建的通知,就在哪里移除)
NSNotificationCenter.defaultCenter().removeObserver(self)
//移除指定的通知
NSNotificationCenter.defaultCenter().removeObserver(self, name: "passValue", object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self, name: "pass", object: nil)
}