无法识别的选择器发送到实例,UITabBarController pushViewController:animated:
Posted
技术标签:
【中文标题】无法识别的选择器发送到实例,UITabBarController pushViewController:animated:【英文标题】:Unrecognized selector sent to instance,UITabBarController pushViewController:animated: 【发布时间】:2015-11-25 10:31:32 【问题描述】:enter image description here我遇到了一些问题。我的问题是这样的:
UITabBarController pushViewController:animated:]: 无法识别 选择器发送到实例 0x7a4d05c0。
此问题与屏幕超时有关。 30 秒无活动后,我的应用程序必须返回登录屏幕,如果用户返回,他必须再次登录。我正在使用 Tabbar 控制器。在标签栏控制器中,我提供了三个标签。如果我单击显示登录屏幕的第一个选项卡...
这是我的代码。
-(void)applicationDidTimeout:(NSNotification *) notif
NSLog (@"time exceeded!!");
UIViewController *controller = [[UIStoryboard storyboardWithName:@"Main" bundle:NULL] instantiateViewControllerWithIdentifier:@"ViewController"];
//I've tried a few varieties of the if statement to no avail. Always goes to else.
if ([controller isViewLoaded])
NSLog(@"Already there!");
else
NSLog(@"go home");
[(UINavigationController *)self.window.rootViewController pushViewController:controller animated:YES];
//[(TIMERUIApplication *)[UIApplication sharedApplication] resetIdleTimer];
【问题讨论】:
究竟是哪一行导致了这个问题? “其他”?这是因为self.window.rootViewController
是UITabBarController
对象,而不是UINavigationController
对象。
@Larme [(UINavigationController *)self.window.rootViewController pushViewController:controller animated:YES];这条线我有异常
您的 self.window.rootViewController 不是 UINavigationController 对象,而是 UITabbarController 对象。如果您没有将 LoginController 对象包装在 UINavigationController 中,则创建一个 UINavigationController 对象并将您的 LoginController 实例设置为其 rootViewController 并检查。我想你是从登录屏幕推送到你的标签栏控制器。
@Muneeba 感谢您的回复。但我无法清楚地理解。你能给我任何示例代码吗?
附上故事板的截图。
【参考方案1】:
我建议您不要让您的登录屏幕成为UITabbarController
的一部分。当用户登录成功时,推送包含用户可以浏览的所有选项卡的选项卡栏,当时间结束时,通过返回用户登录屏幕。对于这种方法,我附上了故事板截图。
当时间结束时,从属于 tabbarcontroller 的任何视图控制器调用以下代码。
self.tabBarController?.navigationController?.popToRootViewControllerAnimated(true);
或者您可以创建一个 BaseUIViewController 类,您可以在其中放置与此时间相关的代码,并从中继承属于您的 UITabbarController
的所有 UIViewController
。
【讨论】:
如果您仍然想将登录屏幕作为您的 UITabbarController 的一部分,那么当时间用完时,强制将您的 UITabbarController 的选定选项卡更改为您的登录选项卡并禁用其余选项卡,以便用户不能选择它们,一旦用户登录,启用它们。但这不应该是这种方法,因为登录屏幕并不总是可用的,我们会根据需要提供它们。 感谢您的回复..非常感谢。很好的指导以上是关于无法识别的选择器发送到实例,UITabBarController pushViewController:animated:的主要内容,如果未能解决你的问题,请参考以下文章
[UICollectionViewCell imageView]:无法识别的选择器发送到实例