NSNotification BAD_ACCESS verince..
İki gündür uğraştığım sorunun çözümüne nihayet ulaştım. Kısaca problemi anlatayım, başınıza gelirse demedi demezsiniz 🙂
UIButton’dan ürettiğim içinde timer olan özel bir class’ım vardı. Bu class’ın initWithFrame methodunda bir notification observer’i yani uygulamadan bir notification gelince cevap verecek fonksiyonu tanımlayan şu satır yer alıyordu.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ilgiliFonksiyon:) name:@"ilgiliNotification" object:nil];
Bu buton tipinden 3-4 tane oluşturup program ile ekrana yerleştiriyordum. Bu butonlara tıklandığında ekranda farklı işlemler oluyordu, mutlaka onlar da durumu etkiliyordu ama şimdi o detaylara girmeyeceğim. Butonlara hiç tıklamazsam ve ekranda herhangi bir şeyi değiştirmezsem sadece notification fırlatacak işlemleri yaptığımda uygulama sorunsuz çalışıyordu. Butonlar notification’lara düzgün tepki veriyordu.
Fakat butonlara tıklayıp ekranda bazı işlemleri yerine getirdiğimde akabinde notification fırlattığımda BAD_ACCESS verip uygulama kesiliyordu.
İlk araştırmalarımda acaba “Main Thread” de mi bu işi yapmak lazım diye notification fırlattığım yeri uygun block içerisine aldım. Fakat fayda etmedi.. Meseleyi uzun uğraşlar sonunda şu benzer problemin çözümünde buldum: http://stackoverflow.com/questions/12396231/unrecognized-selector-while-sending-nsnotification
Uzun lafın kısasını anlatayım. Observer ifadesini init’de yahut initWithFrame gibi bir yerde yazınca observer ifadesindeki “self” class’ı ifade ediyormuş, oluşan nesnenin bellekteki instance’ını değil! BAD_ACCESS de işte bu yüzden oluşuyormuş. Nesne oluştuktan sonra hangi fonksiyonlar çalışıyor diye kısaca göz attığımda – (void)didMoveToSuperview fonksiyonunu öğrendim. Observer ifadeyi buraya yazdığımda hiç bir sorun kalmamış oldu!
İnşallah sizi iki gün uğraşmaktan kurtaracak bir yazı olmuştur 🙂