私は2つのViewControllerを持っています:ViewController
とSecondViewController
です。 この2つのViewControllerにオブザーバを追加しました。 ViewController
には、通知を送信するためのIBActionも定義しました。両方のViewControllerのクロージャを使用して通知を処理します。しかし、ViewController
のクロージャが呼び出されるだけです。 SecondViewController
のクロージャ(とコード全体)が呼び出されない(私はデバッガでチェックした)。クロージャーにはprintステートメントのみが含まれています。 は、ここでのViewControllerでの閉鎖が呼び出されますが、SecondViewControllerでの閉鎖はしていません、私のコードはScondViewControllerObserverがNotificationCenter Swift 4.0を使用して呼び出されない
//SecondViewController
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let nc = NotificationCenter.default
nc.addObserver(forName: Notification.Name(rawValue:"MyNotification"), object: nil, queue: nil) { (notification) in
print("I'm the: \(type(of: self))")
}
}
}
//ViewController
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let nc = NotificationCenter.default
nc.addObserver(forName: Notification.Name(rawValue:"MyNotification"), object: nil, queue: nil) { (notification) in
print("I'm the : \(type(of: self))")
}
}
@IBAction func sendNotification(_ sender: UIButton) {
let nc = NotificationCenter.default
nc.post(name: Notification.Name(rawValue:"MyNotification"), object: nil, userInfo: ["message":"Hello there!", "Date:":Date()])
}
}
されます。たぶん、理由は、通知を投稿する前にSecondViewControllerが初期化されないということです。しかし、ソリューションはどのように見えますか? 何か助けていただければ幸いです。
通知を送信/送信すると、メモリ内のSecondViewControllerインスタンスですか? –
これは呼び出されません。遅れてこの通知を掲示する必要があります。 – Mannopson
私は投稿する前にSVCが初期化されていないので、呼び出されません。デフォルトのinitを呼び出すために 'ViewController'のviewDidLoadに' let svc = SecondViewController() 'を追加しましたが、これは効果がありません。 SVCのクロージャが呼び出されていません。誰かが回避策を知っていますか? – user1895268