首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的ViewController在一次对present(_:animated:completion:)方法的调用之后会连续出现两次?

在一次对present(_:animated:completion:)方法的调用之后,ViewController连续出现两次的原因可能是因为以下情况之一:

  1. 错误的调用方式:可能是在代码中多次调用了present(_:animated:completion:)方法,导致ViewController被多次呈现。请检查代码,确保只有一次调用。
  2. 调用时机不当:可能是在某个事件触发时,多次调用了present(_:animated:completion:)方法。请检查事件触发的逻辑,确保只在需要的时候调用。
  3. 代理方法的实现问题:如果在ViewController中实现了某个代理方法,并在该方法中调用了present(_:animated:completion:)方法,可能会导致多次呈现。请检查代理方法的实现,确保只在需要的时候调用。
  4. 视图层级问题:可能是在视图层级中,多次添加了相同的ViewController实例,导致多次呈现。请检查视图层级的管理,确保只添加一次。

为了更好地解决这个问题,可以尝试以下方法:

  1. 调试代码:使用调试工具(如Xcode的调试器)逐行检查代码,查找多次调用present(_:animated:completion:)方法的原因。
  2. 日志输出:在调用present(_:animated:completion:)方法前后,分别输出日志,以便确定是否有多次调用的情况。
  3. 使用断点:在调用present(_:animated:completion:)方法的代码行上设置断点,观察是否会多次触发该断点。
  4. 检查代理方法:如果有实现代理方法,检查代理方法的调用时机和逻辑,确保只在需要的时候调用。
  5. 检查视图层级:检查视图层级的管理,确保只添加一次ViewController实例。

总结起来,连续出现两次ViewController可能是由于错误的调用方式、调用时机不当、代理方法的实现问题或视图层级问题所导致。通过调试代码、输出日志、使用断点和检查代理方法以及视图层级,可以帮助定位并解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

跟iOS UI捉迷藏,真的能够获取到self.presentingViewController

近期,在做一个有趣实验,研究presentViewController和dismissViewController对应关系,这里发现了一个有趣现象,通常情况下,两者配对使用,如果连续两次presentViewController...会出现一个warning:同时第二个会有很大概率加载失败(如何让载成功例子后面会提到) 两次dismissViewController则会出现: 不要纠结错误信息,总之是不对 配对使用是一个很好习惯...第二点:如果你present了一系列控制器,那么系统会把被present出来控制器放在一个栈中,当处在底层控制器执行dismiss时候,它之后被present出来控制器都会被移除,只有栈顶上控制器会有...也就是说,调用presentViewController:animated:completion:方法时,真正作为跳转容器并不一定是调用这个方法view controller,而是取决于modalPresentationStyle...,而一旦第二个无法加载成功,则会开发同学产生很深困扰,也会把难以预期UIBug暴漏给用户 事实上,设置了上文两个属性后,再连续加载,你会发现连续两次presentViewController,第二个控制器加载成功

69420
  • Flutter混合开发:已有iOS项目中引入Flutter

    docs/development/add-to-app/ios/project-setup 但是实际过程中会遇到各种问题(当然本身ios开发不熟悉也造成了不小困扰),这里结合官方步骤和我经验来说说整个接入过程和遇到坑...这里因为ios开发属于小白,所以一开始选择是SwiftUI Interfase: SwiftUI LifeCycle: SwiftUI App Language:Swift 但是在后续开发中发现...但是这个应该是与上面添加framework文件效果是一样只做了上面添加文件,没有设置这个运行是没有问题。不知道如果同时设置会不会出现什么问题。...,但是为什么出现这样问题?...(flutterViewController, animated: true, completion: nil) } } 这样就可以启动不同页面,但是可以发现我们没有用到之前AppDelegate

    4K50

    iOSUIViewController生命周期和属性方法解析

    ,再次创建这个类对象,initalize方法将不会被调用,对于这个类子类,如果实现了initialize方法,在这个子类第一次创建对象时会调用自己initalize方法,之后不会调用,如果没有实现...3:loadView方法是开始加载视图起始方法,除非手动调用,否则在ViewController生命周期中没特殊情况只会被调用一次。...4:viewDidLoad方法是我们最常用方法,类中成员对象和变量初始化我们都会放在这个方法中,类创建后,无论视图展现或消失,这个方法也是只会在将要布局时调用一次。...注意:经过测试,从nib文件加载controller,只要不释放,每次viewWillAppare时都会调用layoutSubviews方法,有时甚至会在viewDidAppare后调用一次layoutSubviews...,而重点是从代码加载则只会在开始调用一次,之后都不会,所以注意,layoutSubviews中写相关布局代码十分危险。

    3K20

    iOS 小技能:app嵌入H5页面的通用模版

    解决思路:使dismissViewControllerAnimated调用一次,或者让UIDocumentMenuViewController找不到presentingViewController 基础概念...对象调用自己dismissViewControllerAnimated,不让加载H5 网页控制器被刚掉(推荐使用此方法) 当前ViewController所有presentedViewController...除非用户自己要求退出self.exitKNBaseWebViewControllerflagged = yes 或者 当想dismiss掉当前ViewController时候,不能调用本身dismissViewControllerAnimated...,直接调用父类dismissViewControllerAnimated 重写拥有web View控制器dismiss 方法 #if 1 -(void)dismissViewControllerAnimated...:(BOOL)flag completion:(void (^)(void))completion { /**presentedViewController 本控制器即将present

    96520

    Swift| 基础语法(五)

    前言 总结下 swift下基础语法,里面涉及到:常量&变量、Swift中数据类型、逻辑分支、循环、字符串相关、数组和字典、方法书写调用等内容,考虑到阅读体验分多篇来展示,希望大家学习swift...有所帮助,同时也是自己一个总结。...} Swift中,创建tableViewCell方法可以分为两种创建tableView时候注册和需要使用时手动创建。先聊聊创建tableView时候直接注册cell: myTb?....} //使用方式 AppManager.getSharedInstance() 为什么需要保证INIT私有化?...因为Swift中,所有对象构造器默认都是public,所以需要重写你init让其成为私有的。 这样就保证像如下代码编译报错,不能通过。 六、从相册选择照片或者拍照 ?

    2K30

    【IOS开发基础系列】UIViewController专题

    解决方法1:去掉动画     解决方法2:监听当前view动画是否完成     问题场景:         此类问题比较容易出现在两个vc连续push或者pop时候,简单做法就是将push或者pop...:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(5_0);     (1)前面3种方法这里就不多说了,很常见系统方法.至于第四种,在前面文章...普通present modal VC效果大家都已经很熟悉了,这次我们先实现一个自定义类似的modal present效果,与普通效果不同是,我们希望modalVC出现时候不要那么乏味就简单从底部出现...这个布尔值将在监测到手势开始时被设置,我们之后会调用返回这个InteractiveTransition时候用到。     ...transition动画方法来进行VC切换就已经够好够方便了,为什么iOS7中还要引入一套自定义方式呢。

    57030

    玩转iOS转场动画 原

    界面跳转时,将要弹出视图控制器设置如下: ViewController2 * v2 = [ViewController2 new]; self.transDelegate = [[TransDelegate...YES completion:nil]; 我们先来看UIViewControllerTransitioningDelegate协议中的如下几个函数: //这个函数用来设置当执行present方法时 进行转场动画...:(UIViewController *)dismissed; //这个函数用来设置当执行present方法时 进行可交互转场动画 - (nullable id <UIViewControllerInteractiveTransitioning...我们使用系统导航控制器时,右划返回效果用户体验十分友好,我们下面就来试着将视图控制器模态跳转设计成类似导航可交互。    ...:^(BOOL finished) { [self.context cancelInteractiveTransition]; }]; } @end 下面我们来添加手势,ViewController2

    1.3K51

    Swift-MVVM 简单演练(二)

    可能会遇到这样问题,一次加载20条微博数据,第20条在上拉加载后出现两次。 原因: 若指定max_id参数,则返回ID小于或等于max_id微博,默认为0。...(max_id - 1) : 0)" ] 上拉刷新上限设置 因为微博未通过审核应用刷新有限制,大概连续刷新143条数据就不会再有新数据返回了。...(rootViewController: HQLoginController()) present(nav, animated: true, completion: nil) } 登录这里还是喜欢把它单独抽出来一个模块...__allocating_init() 再之前调用一个方法就是用户账户属性userAccount懒加载 再上一层调用方法是userLogongetter方法 再上一层调用方法就是HQBaseViewController...()时候,还会再注册一个同样通知,相当于注册了两次,那么监听到事件时候,执行方法也会执行两次,就没必要了。

    2.3K40

    iOS 组件化CTMediator

    项目没有使用CTMediator之前模块间关系是这样 ?...当ModuleA要调用ModuleB和ModuleC时候,需要#import ModuleB,ModuleC 同样ModuleB要调用ModuleA和ModuleC时候,需要#import ModuleA...presentViewController:viewController animated:NO completion:nil]; } /* #pragma mark - Navigation /...怎么判断项目需要组件化 1.需要组件化首先就需要模块化,就是业务高度抽象。需要把相关业务都抽取到一个模块里面。这就不适合创业公司或者只有一个开发人员公司。...3.如果公司有2个以上开发人员并且时间相对充裕情况下,公司业务相对稳定,情况下可以考虑使用组件化。 4.公司有2个及以上App,有重合业务可以优先考虑先把重合业务抽取成组件。

    2.1K30
    领券