通知中心在didSelectRowAt不工作在iOS的斯威夫特3

问题描述:

你好 我想通知发送到另一个这样的视图控制器:通知中心在didSelectRowAt不工作在iOS的斯威夫特3

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    NotificationCenter.default.post(name: Notification.Name("thisIsTestNotif"), object: nil) 
} 

因此设置这个在viewDidLoad中:

NotificationCenter.default.addObserver(self,selector: #selector(thisistestHandler),name: NSNotification.Name(rawValue:"thisIsTestNotif"),object: nil) 

,并在以下几点:

func thisistestHandler(notification:Notification) { 
} 

但它不起作用。主要问题是在didSelectRow方法中设置调用方法时产生的问题。

请帮我解决这个问题。

+0

你在哪里添加通知中心观察者?,我认为你的类没有初始化你添加观察者的地方。 – Hitesh

+0

@Hitesh First init,然后在另一个vc中调用它。 –

+0

'thisistestHandler'初始化错误,首选@vadian答案 – Hitesh

您的观察者选择器是错误的。您的通知观察者方法需要参数,您尚未在选择器参数中为该方法添加观察者时指定该参数。您的项目正在编译的事实意味着必须有另一个名称相同但没有参数的方法。

更改为:

override func viewDidLoad() { 
    ............ 
    ............ 

    NotificationCenter.default.addObserver(self,selector: #selector(thisistestHandler(notification:)),name: NSNotification.Name(rawValue:"thisIsTestNotif"),object: nil) 
} 

@objc func thisistestHandler(notification:Notification) { 

} 
+0

我测试过但没有工作。 –

+0

但是,在viewDidLoad中设置调用方法时,它可以正常工作。 –

+0

@reza_khalafi:当您从另一个视图发送通知时,注册为观察者的视图控制器是否在内存中? –

最可靠的 - 和ObjC兼容 - 斯威夫特3语法

#selector(thisistestHandler(_:)) 

func thisistestHandler(_ notification: Notification) {... 

当然的通知的接收者必须有已经加载。


注:

如果控制器相关然后协议/委托或闭合回调是更好的选择。 A Notification应该只在可能有多个接收者或发送者和接收者不相关的情况下使用。

而不是viewDidLoad

添加

NotificationCenter.default.addObserver(self,selector: #selector(thisistestHandler),name: NSNotification.Name(rawValue:"thisIsTestNotif"),object: nil) 

viewWillAppearviewWillDisappear删除观察者。

只是不确定,但可能会为你工作。