【问题标题】:Unrecognized selector sent to instance,UITabBarController pushViewController:animated:无法识别的选择器发送到实例,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 感谢您的回复。但我无法清楚地理解。你能给我任何示例代码吗?
  • 附上故事板的截图。

标签: ios objective-c iphone


【解决方案1】:

我建议您不要让您的登录屏幕成为UITabbarController 的一部分。当用户登录成功时,推送包含用户可以浏览的所有选项卡的选项卡栏,当时间结束时,通过返回用户登录屏幕。对于这种方法,我附上了故事板截图。

当时间结束时,从属于 tabbarcontroller 的任何视图控制器调用以下代码。

self.tabBarController?.navigationController?.popToRootViewControllerAnimated(true);

或者您可以创建一个 BaseUIViewController 类,您可以在其中放置与此时间相关的代码,并从中继承属于您的 UITabbarController 的所有 UIViewController

【讨论】:

  • 如果您仍然想将登录屏幕作为您的 UITabbarController 的一部分,那么当时间用完时,强制将您的 UITabbarController 的选定选项卡更改为您的登录选项卡并禁用其余选项卡,以便用户不能选择它们,一旦用户登录,启用它们。但这不应该是这种方法,因为登录屏幕并不总是可用的,我们会根据需要提供它们。
  • 感谢您的回复..非常感谢。很好的指导
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2012-07-24
相关资源
最近更新 更多