iOS Push Segue(以编程方式)有时会卡住但不会崩溃
Posted
技术标签:
【中文标题】iOS Push Segue(以编程方式)有时会卡住但不会崩溃【英文标题】:iOS Push Segue (programmatically) sometimes stuck but won't crash 【发布时间】:2015-03-18 04:22:04 【问题描述】:当我打电话时:
[self.navigationController pushViewController:SOME_VIEW_CONTROLLER animated:YES];
应用随机卡住(它没有崩溃,所以没有错误日志)。试过调试没有结果。
注意:
-
我从
UIViewController
类别中将此称为pushViewController
。
这有什么问题吗?
我没有使用故事板
问题随机存在(并非一直发生)
当它卡住时,viewDidAppear
不会被调用(viewWillAppear, viewWillLayoutSubviews, viewDidLayoutSubviews
仍然
叫)
我使用动画时从未出现过问题:否
一些代码sn-ps:
- (void)routeToBookingDetailsForCustomer:(BookingModel *)booking
VTBookingDetailsForCustomerViewController *vc = [VTBookingDetailsForCustomerViewController new];
vc.booking = booking;
[self.navigationController pushViewController:vc animated:YES];
刚刚找到另一个类似情况的帖子: pushViewController stuck or viewdidappear fail
【问题讨论】:
一些代码会很有用... [self.navigationController pushViewController:"view?"动画:是];你写在你的代码中吧? 你在使用故事板吗? @Vidhyanand900 不,我没有使用故事板 VTBookingDetailsForCustomerViewController 的视图是在哪里制作的?您有 xib 文件,还是在代码中显示它? 【参考方案1】:我认为你必须像这样通过Nib name
- (void)routeToBookingDetailsForCustomer:(BookingModel *)booking
VTBookingDetailsForCustomerViewController *vc = [[VTBookingDetailsForCustomerViewController alloc]initWithNibName:@"VTBookingDetailsForCustomerViewController" bundle:nil];
vc.booking = booking;
[self.navigationController pushViewController:vc animated:YES];
笔尖名称表示您的XIB name
任何XIB name
用于您的VTBookingDetailsForCustomerViewController,您必须在initWithNibName:@"yourXIBname"
中传递它
【讨论】:
看不懂,为什么要用storyboard/nib初始化呢? 没有XIB,控制器在哪里推? 没有 XIB 会在你的屏幕上显示什么..?这需要一些视图(XIB)来展示你的设计...... 我把我的代码改成了你建议的,但它并没有解决问题。此外,正如我所提到的,问题是“随机发生的”。如果问题真的是因为没有加载xib,为什么没有出现问题时会出现视图 一定是您的 VTBookingDetailsForCustomerViewController 中的一些问题。显示 viewdidload、viewdidappear 的代码。不要对两个线程发表评论。我会关注这个话题。 :)【参考方案2】:你试过这种方法吗?
someViewController *someVC = [someViewController alloc] initWithNibName:@"someViewController " bundle:NULL];
someVC.someVariable = someValue;
[self.navigationController pushViewController:someVC animated:YES];
编辑:刚刚看到'Dipen Chudasama'已经回答了!
【讨论】:
看不懂,为什么要用storyboard/nib初始化呢? 因为,我们必须告诉pushViewController
它要进入哪个viewController。 XIB(新名称)和 NIB(旧名称)名称相同。所以,我们一起初始化类 someViewController
和 nib/xib 'someViewController'。因为,我们必须告诉pushViewController
它要进入哪个viewController。 XIB(新名称)和 NIB(旧名称)名称相同。所以,我们一起初始化类 someViewController
和 nib/xib 'someViewController'。 Refer
我把我的代码改成了你建议的,但它并没有解决问题。此外,正如我所提到的,这个问题是“随机发生的”。如果问题真的是因为没有加载xib,为什么没有出现问题时会出现视图
一定是您的 VTBookingDetailsForCustomerViewController 中的一些问题。显示viewdidload的代码,viewdidappear。
我不这么认为,因为我已经删除了 viewdidload/viewdidappear 中的所有代码。更新:当我使用动画时问题解决了:NO 动画有问题吗?【参考方案3】:
您是否通过实现UINavigationProtocolDelegate
结合UIViewControllerInteractiveTransitioning
来使用自定义过渡动画?
我在自己的应用程序中遇到了这个问题,结果发现我错误地启动了一个我从未完成的交互式过渡。在这种情况下,所有调试都显示控制器已被推送,但 UI 直到我的应用更改状态后才更新。
【讨论】:
【参考方案4】:请在主队列中尝试 pushViewController 代码。
dispatch_async (dispatch_get_main_queue(), ^
VTBookingDetailsForCustomerViewController *vc = [VTBookingDetailsForCustomerViewController new];
vc.booking = booking;
[self.navigationController pushViewController:vc animated:YES];
);
【讨论】:
以上是关于iOS Push Segue(以编程方式)有时会卡住但不会崩溃的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 在 iOS 中以编程方式进行 segue