2016-04-08 16 views
0

Projem için oturum açma eylemsizliğinde. Projenin RootViewController sınıfında bir NSNotification yarattım. Nesnede oturumun etkin olmaması için nsnotification yaklaşımı c

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: @"Close" 
                      style: UIBarButtonItemStyleDone 
                      target: self 
                      action: @selector(closeModal)]; 

    UIImage *image = [UIImage imageNamed:@"fidelity_logotype"]; 
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; 
    [imageView setImage:image]; 
    [self.navigationItem setTitleView:imageView]; 
    self.navigationController.view.backgroundColor = [UIColor fidelityGreen]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidTimeout:) name:@"ApplicationTimeout" object:nil]; 
} 


- (void) applicationDidTimeout:(NSNotification *) notif 
{ 
    NSLog(@"I m here"); 


    BCDSessionInactivityViewController *sessionView=[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"InactivityViewController"]; 

    sessionView.modalPresentationStyle = UIModalPresentationFormSheet; 
    sessionView.preferredContentSize = CGSizeMake(838,340); 

    [[self topViewController] presentViewController:sessionView animated:YES completion:nil]; 

} 

ve logoutviewcontroller içinde

, i bildirim yayınlayarak burada kodudur

 - (IBAction)logoutbtn:(id)sender 
     { 
      NSLog(@"logout is called"); 
      [sessionTimer invalidate]; 


sessionTimer = nil; 
     [[BCDTimeManager sharedTimerInstance]stopIdleTimer]; 
     //[self dismissViewControllerAnimated:YES completion:nil]; 

     [[NSNotificationCenter defaultCenter] removeObserver:self name:@"ApplicationTimeout" object:nil]; 


     [self performSegueWithIdentifier:@"Thankyoupage" sender:self]; 


    } 

aşağıda yazılı bu gözlemci çıkarmadan ediyorum. İlk kez giriş için

- (void)idleTimerExceeded { 
    NSLog(@"idle time exceeded"); 
    [[NSNotificationCenter defaultCenter] 
    postNotificationName:@"ApplicationTimeout" object:nil]; 
} 

, bu zamanlayıcı aştığında, ben bir bildirim ve model görünümü sonrası mükemmel presesnted, ancak kullanıcı oturum kez bu bildirim gönderildiği zaman, selektör yönteminden sonra iki kez denir oluyor çalışıyor

Bildirimin yalnızca bir kez yayınlandığından eminim.

Her görünüm denetleyicisinde bir bildirim oluşturmalıyım ve daha sonra görünüm kaldırılırken kaldırmalı mıyım?

Burada yanlış yapıyorum?

+0

kaldırılması için removeObserver diyoruz. Bildirim kaydının yalnızca bir kez çağrıldığından emin misiniz? Sadece bir kez arandığını doğrulamak için oraya giriş yaptınız mı? – fsb

+0

@fbara i bildirimi gönderdiğim kodu ekledim. Oldukça eminim ki bu bildirim bir defaya mahsus geçiliyor ama metot iki kere çağrılıyor – Nitya

+0

Her VC'de yeni bir bildirim oluşturmak zorunda kalmamıştım. Kodda yalnızca bir konumdan 'idleTimerExceeded 'mi arıyorsun? – fsb

cevap

0

Bildirimi RootViewController'a ekliyor ve LogoutViewController'dan kaldırmaya çalışıyorsunuz. Böylece RootViewController'a eklenen bildirim gözlemcisi asla kaldırılmaz. Bu yüzden her çıkış ve giriş yaptığınızda, gözlemci çağrısı bir artışla artacaktır. Sorunu düzeltmek için, gözlemciyi RootViewController nesnesinden kaldırmanız gerekir. zamanlayıcılar diğer bazı görünümlerde aşması ve eğer

Ben RootViewController gözlemciyi kaldırırsanız, yorumunuzda belirtilen sorunu düzeltmek için

, ardından bildirim gözlemci çağrılmaz. Biz zamanlayıcı bildirim ateş etmek istiyorum, çünkü Ayrıca i (addObserver sadece gözlemci eklemek için

  • Bir AppDelegate yılında
  • Yaz iki genel yöntemleri rootviewController

    ulaştıktan sonra uygulama temsilci üzerinde gözlemciyi ekleyemezsiniz)
  • (removeObserver)
  • ulaşmak gözlemci kaldırmak için
  • Bir RootViewController, gözlemci çıkış basıldığında
  • eklemek için addObserver yöntemini çağırın İyi misin bildirim gözlemci ekledik ama bildirim yayınlar nerede göremiyorum izleyiciye
  • +0

    Merhaba Midhun, senden başka birinden yanıt aldığını gördüm. Gözlemciyi RootViewController'da kaldırırsam, zamanlayıcılar başka görünümlerde aşıyorsa ve bildirim gözlemcisi çağrılmazsa. Ayrıca, app delegesi üzerine gözlemci ekleyemiyorum çünkü sadece rootviewController – Nitya

    +0

    'a ulaştıktan sonra tetiklenecek zamanlayıcı bildirimi istiyoruz. Burada sıkışmış biriyim. – Nitya

    +0

    @Nitya: Lütfen güncellenmiş yanıtı kontrol edin –

    İlgili konular