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?
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@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
Her VC'de yeni bir bildirim oluşturmak zorunda kalmamıştım. Kodda yalnızca bir konumdan 'idleTimerExceeded 'mi arıyorsun? – fsb