NotificationCenter Selector 方法未在 Swift 中调用

Posted

技术标签:

【中文标题】NotificationCenter Selector 方法未在 Swift 中调用【英文标题】:NotificationCenter Selector method is not calling in Swift 【发布时间】:2018-09-28 09:37:51 【问题描述】:

我正在尝试将第一个 viewcontroller 文本字段数据发送到第二个 viewcontroller 标签中。

在第一个控制器中,内部发送动作按钮添加通知发布方法

 @IBAction func sendtBtn(_ sender: Any) 
    let secVc = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    self.navigationController?.pushViewController(secVc, animated: true)

     NotificationCenter.default.post(name: Notification.Name( "notificationName"), object: nil, userInfo: ["text": firstTextField.text])
   

第二个viewcontroller addobserver方法在view didload里面

   NotificationCenter.default.addObserver(self, selector: #selector(self.showMsg(_:)), name: Notification.Name( "notificationName"), object: nil)

选择器功能:

func showMsg(_ notification: Notification)
    print("helloooo")
    var vcData = notification.userInfo?["text"]
    firstLabel.text = vcData as! String

当为添加观察者保留断点时,它观察者但它不调用 showMsg 函数。 请在这段代码中帮助我。

【问题讨论】:

如果正在发布通知,请使用断点检查。另外,为什么你在post 中使用Notification.Name,在observer 中使用NSNotification.Name?您还可以将showMsgnotification 的类型更改为Notification 而不是NSNotification NSNotification.Name( "notificationName")替换NSNotification.Name(rawValue: "notificationName") @RakeshaShastri 和 pratik prajapati 我已经替换了 NSNotification.Name("notificationName") 并且 Notification 仍然 showMsg() 没有调用 @Swift 使用最新代码编辑问题以及检查通知是否使用断点发布时发生了什么? 为了测试通知-->首先去 secondViewController 然后回到 firstViewController 然后调用 sendtBtn 方法......然后你的通知工作完美@Swift 【参考方案1】:

确实拥有对第二个视图控制器的引用。 完全没有理由使用Notification。如果只有一个接收者且对象相关,则不要使用通知。

代码不起作用,因为发送通知时视图尚未加载。

忘记通知。而是在第二个视图控制器中创建一个属性,在sendtBtn 中分配值并在viewDidLoad 中显示消息

@IBAction func sendtBtn(_ sender: Any) 
    let secVc = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    secVc.message = firstTextField.text
    self.navigationController?.pushViewController(secVc, animated: true)


第二个视图控制器

var message = ""

func viewDidLoad() 
    super.viewDidLoad()
    firstLabel.text = message

【讨论】:

以上是关于NotificationCenter Selector 方法未在 Swift 中调用的主要内容,如果未能解决你的问题,请参考以下文章

Swift 学习之 NotificationCenter

声明 NotificationCenter.default.addObserver [swift]

没有这样的模块错误“NotificationCenter”WatchOS,Swift

NotificationCenter swift3无法观察帖子

为 watchOS Simulator 构建时 NotificationCenter 不可用

RxSwift,如何更温和地使用 NotificationCenter?