NSNotification & NotificationCenter


Notification Center

Nesneler arası iletişim için kullanılabilecek yöntemlerden biri NotificationCenter’dır. Bu yapıda siz bir veriyi post ettiğiniz zaman register olmuş tüm nesnelerin bu veriyi alması ve tetiklenmesi sağlanır.

AViewController.swift (Tetikleyen)


BViewController.swift (Tetiklenen)


NotificationCenter Döngüsü

Burada önemli olan nokta addObserver diyerek register olduğunuz notification siz kaldırmadığınız sürece aktif kalacaktır. ViewController nesnesi görüntülendiği zaman notification’ının eklenmesi ve bu ekran değiştiği durumda da notification havuzundan çıkılması gerekmektedir. Bunu doğru yönetmezsek başka bir ekrandaki ViewController içerisindeki method tetiklenecek ve aslında gereksiz bir işlem gerçekleşecektir. Bunun için yukardaki viewDidLoad içerisinde yapılan tanımlama aslında viewWillAppear içerisinde yapılması ve viewWillDissapear olduğunda da notificationcenter’dan çıkarılması gerekmektedir. Bunu aşağıdaki şekilde gerçekleştirebilirsiniz.


Fakat her durumda bu yapı doğru değildir. Siz ekrandan çıkmış olsanız da Notification’ın aktif kalmasını isteceğiniz durumlarda söz konusudur. Örneğin arka planda müzik çalınmasını sağlayan bir ekranınız var ise ve müziği durdurmak için bir Notification’a sahipse siz ekrandan ayrılsanız bile Notification’ın aktif kalması gerekmektedir ki başka ekranlardan müziğin durdurulması sağlanabilsin. Yani notification’ı ne zaman ekleyeceğinizi ve ne durumda kaldıracağınızı yapacağınız işe göre belirlemelisiniz. Bu şekilde ekranda ayrılsak bile silinmemesi gereken bir notification var ise aşağıdaki şekilde kodlayabiliriz.

Göreceğiniz gibi bu durumda viewDidLoad içerisinde Notification’ı ekleyip, deinit olduğu durumda da remove etmek yeterli olacaktır.
Size ait bir notification’ı herhangi bir başka ekrandan aşağıdaki şekilde tetikleyebilirsiniz. Bu işlem sonrasından register olmuş tüm nesneler ve methodlar tetiklenecektir.
NotificationCenter.default.post(name: stopPlayerNotification, object: nil)

Hiç yorum yok:

Yorum Gönder

Yorumunuz için teşekkür ederim.