我有代码在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',原因:'推送相同的视图 不支持多次使用控制器实例'。
有人可以帮忙吗?
答案 0 :(得分:0)
看起来您要在viewcontroller
中放置yourNavigationViewController
的两个实例,因此在推送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)