标签栏有一个注销按钮,可以在点按时立即显示登录屏幕。
我想在离开当前标签视图之前建立一个确认注销警告,因此将以下代码添加到shouldSelectViewController块的开头:
if(viewController == mLogoutCont) {
// Post notification to initiate showing the logout confirmation alert.
[[NSNotificationCenter defaultCenter] postNotificationName:@"confirmLogout" object:self userInfo:nil];
return false;
}
应用程序在postNotificationName调用内崩溃,并出现以下NSException错误:
2015-04-29 09:40:59.333 TestApplication[5420:210308] -[NSConcreteNotification presentViewController:animated:completion:]: unrecognized selector sent to instance 0x7fe17217cc60
2015-04-29 09:40:59.341 TestApplication[5420:210308] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteNotification presentViewController:animated:completion:]: unrecognized selector sent to instance 0x7fe17217cc60'
如果我注释掉postNotificationName行,当点击“LogOut”标签按钮时,应用程序不会崩溃 - 屏幕上没有任何视觉上的变化 - 由于return false;
,这是预期的行为。
答案 0 :(得分:0)
所以,当" LogOut"按钮在tabBar上点击。感谢@Ricardo和@Larme让我在收到通知后审查被调用的例程。
崩溃的原因是当前的viewController未正确传递到logoutConfirmationAlert
,并且在调用presentViewController
时发生了NSException。
这是捕获通知时调用的例程:
-(void)logoutConfirmationAlert {
NSLog(@"Entered logoutConfirmationAlert");
UIAlertController* alert;
alert = [UIAlertController alertControllerWithTitle:@"Log Out Confirmation"
message:@"Please confirm that you wish to log out"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"Log Out" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
// [alert dismissViewControllerAnimated:YES completion:nil];
NSLog(@"Log Out");
[self signOut];
}];
UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[alert dismissViewControllerAnimated:YES completion:nil];
NSLog(@"Cancel");
}];
[alert addAction:defaultAction];
[alert addAction:cancelAction];
NSLog(@"Before presentViewController");
[mCurrentViewController presentViewController:alert animated:YES completion:nil];
NSLog(@"Presented alert");
}
我在发布通知之前将当前视图控制器存储在mCurrentViewController
中。
我还有一个问题是,在userInfo
的{{1}}参数中将对当前ViewController的引用作为字典项传递是否合适?