Ios 无法推送UIViewController

Ios 无法推送UIViewController,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,在推送视图控制器时,UI刷新出现问题。这是我正在做的 因此,当我的应用程序收到推送通知时,将从我的AppDelegate调用didReceiveMemotentification方法,然后执行以下操作: UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; ReceiptViewController *rv; if(scr

在推送视图控制器时,UI刷新出现问题。这是我正在做的

因此,当我的应用程序收到推送通知时,将从我的
AppDelegate
调用
didReceiveMemotentification
方法,然后执行以下操作:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

                ReceiptViewController *rv;

                if(screenHeight == 480)
                {
                    rv = [storyboard instantiateViewControllerWithIdentifier:@"receiptView2"];
                }else{
                    rv = [storyboard instantiateViewControllerWithIdentifier:@"receiptView"];
                }
                //ReceiptViewController *rv = [storyboard instantiateViewControllerWithIdentifier:@"receiptView"];

                rv.orderID = userInfo[@"orderID"];
                rv.driverID = userInfo[@"driverID"];
                rv.cost = [userInfo[@"cost"] intValue];

                [(UINavigationController *)self.window.rootViewController pushViewController:rv animated:YES];
所以这里^,我基本上是根据屏幕大小(3.5英寸或4英寸)将其重定向到
ViewController
。这个很好用

然而,在我的
ReceiptViewController
中,我有一个具有以下操作的按钮:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    PickupViewController *pv;

    if(screenHeight == 480)
    {
        NSLog(@"---------------------------I'm @ 480 Height!!!---------------------------");

        pv = [storyboard instantiateViewControllerWithIdentifier:@"pickupView2"];
    }else{

        NSLog(@"---------------------------I'm @ 568 Height!!!---------------------------");

        pv = [storyboard instantiateViewControllerWithIdentifier:@"pickupView"];
    }



    NSLog(@"-------------------Going to PickupViewController!!!!-------------------");

    [self.navigationController pushViewController:pv animated:YES];
现在是奇怪的部分。当点击按钮并执行上述代码块时,my
PickupViewController
中的
init
方法将运行(我知道这一点,因为我看到my
NSLog
出现了),但我仍然看到了
ReceiptViewController
。即使它仍在
ReceiptViewController
上,也会有响应。不知道我做错了什么。任何帮助都将不胜感激

-----------编辑---------------------

我还应该提到,只有在DidReceiveMemoteNotification方法(当我收到推送通知时)中推送到ReceiptViewController时,AppDelegate方法才会发生这种情况。如果我在AppDelegate的applicationWillEnterForeground中执行完全相同的操作,并将完全相同的参数传递给ReceiptViewController,那么它就可以正常工作

-----------更新---------------------

因此,当按下按钮时,我运行了以下命令:

NSUInteger countViews = [self.navigationController.viewControllers count];
    NSString *CurrentSelectedViewController = NSStringFromClass([[self.navigationController visibleViewController] class]);

    NSLog(@"---------------------------Current ViewController => %@, Total ViewControllers on NavController => %tu", CurrentSelectedViewController, countViews);
我得到了ViewController的正确名称&它说堆栈计数是7。不知道这里发生了什么。。。所以我引用的是正确的导航控制器&它不是null。如果我这样做:

[self.navigationController popToRootViewControllerAnimated:YES];
我要回来了,克什克·克拉什(西格伯特)


您可以使用segue作为此功能的替代方案

[self.navigationController pushViewController:pv animated:YES];
因为有时候这条线不行。这是一个编译器错误。并清理应用程序的生成文件夹。使用command+shift+alter+k。 并在设备中进行测试。 这解决了我的问题

UIStoryboard *storyboard =  [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
//创建情节提要的对象 UIViewController*ivc=[storyboard InstanceEviewController WithiIdentifier:@“视图控制器的名称”]

//创建一个视图控制器,然后再推它
[self.navigationcontroller pushViewController:ivc动画:是]

从此行调用
PickupViewController
中的
init

[storyboard instantiateViewControllerWithIdentifier:@"pickupView2"];
这就是为什么从
PickupViewController
获取
NSLog
。据我所知,导航部分出现了故障。尝试像在第一个块中那样调用导航控制器,例如

[(UINavigationController *)self.window.rootViewController pushViewController:rv animated:YES];

UIStoryboard*情节提要=[UIStoryboard情节提要,名称:@“Main_iPhone”捆绑包:nil]; //创建情节提要的对象

 

UIViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"name of your view controller"];
    [self.navigationcontroller pushViewController:ivc animated:YES];
//创建一个视图控制器,然后再推它

    [self.navigationcontroller pushViewController:ivc animated:YES];

只是一个建议,你检查了你的pushViewController代码是否在主线程上执行了吗?请澄清你的问题,你到底问了什么。嗨,是的,它在主线程上运行。我的问题是为什么我的UI没有刷新到PickupViewController?你是否为你的PickupViewController设置了任何情节提要id