Ios 无法推送UIViewController
在推送视图控制器时,UI刷新出现问题。这是我正在做的 因此,当我的应用程序收到推送通知时,将从我的Ios 无法推送UIViewController,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,在推送视图控制器时,UI刷新出现问题。这是我正在做的 因此,当我的应用程序收到推送通知时,将从我的AppDelegate调用didReceiveMemotentification方法,然后执行以下操作: UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; ReceiptViewController *rv; if(scr
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];
现在是奇怪的部分。当点击按钮并执行上述代码块时,myPickupViewController
中的init
方法将运行(我知道这一点,因为我看到myNSLog
出现了),但我仍然看到了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