【问题标题】:crash while trying push view controllers with animation尝试使用动画推送视图控制器时崩溃
【发布时间】:2016-08-05 12:21:04
【问题描述】:

我有代码在 UINavigation 控制器堆栈上存储对 3 个 Viewcontrollers(比如类 typeA)的引用,然后所有这些视图控制器都从堆栈中弹出。

稍后单击按钮后,我尝试正常推送 2 个视图控制器,然后对于第 3 个视图控制器,我使用以下方法。

[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];

导航以这种方式发生 classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC" --> classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC" --> classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC"(此时兑现)。

当用户导航缓慢时,此代码运行良好,但如果用户单击按钮较快,则会崩溃并出现异常:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'推送相同的视图 控制器实例不支持多次”。

有人可以帮忙吗?

【问题讨论】:

  • 添加你的语言标签是客观 C 或 swift

标签: ios objective-c uinavigationcontroller quartz-core


【解决方案1】:

看起来您在yourNavigationViewController 中放置了两个viewcontroller 实例,所以在继续viewcontroller 之前,如果存在这样的实例,您应该删除实例-

func RemoveViewControllersFromNavigationController(vcClass:AnyClass)->Void
{

        let array = self.navigationController?.viewControllers


        if array != nil
        {
            for aviewcontroller  in array!
            {
                if aviewcontroller.isKindOfClass(vcClass)
                {
                   self.navigationController?.viewControllers.removeAtIndex( (self.navigationController?.viewControllers.indexOf(aviewcontroller))!)
                }
            }

        }

}

在推送您的viewcontroller之前调用上述方法

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let vc  = mainStoryboard.instantiateViewControllerWithIdentifier("EventDetailViewController") as! EventDetailViewController
                   RemoveViewControllersFromNavigationController(EventDetailViewController)
            self.navigationController?.pushViewController(vc, animated: true)

【讨论】:

  • 请查看问题,我正在尝试推送 3 个相同类类型的视图控制器...您的代码只能在您只推送一个视图控制器时使用,如果您想推送 3 个视图控制器怎么办哪些是相同的类类型但不同的实例?
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2018-11-23
  • 2010-11-16
  • 1970-01-01
相关资源
最近更新 更多