无法识别的选择器发送到实例,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.rootViewControllerUITabBarController 对象,而不是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]:无法识别的选择器发送到实例

UISwipeGesture '发送到实例的无法识别的选择器'

无法识别的选择器发送到实例

无法识别的选择器发送到数组中的实例[重复]

无法识别的选择器发送到实例 Objective-C

无法识别的选择器发送到实例