美文网首页
whose view is not in the window

whose view is not in the window

作者: LD_左岸 | 来源:发表于2018-07-21 11:23 被阅读15次
    • 这是最近在做强制更新的小功能时 碰见的三个小警告⚠️ 简述一下解决的思路
    • 你遇见的场景可能与此并不雷同 所以仅供参考

    whose view is not in the window hierarchy!

    Warning: Attempt to present <UIAlertController: 0x7fc5e9048c00> on <ViewController: 0x7fc5e7e0d9e0> 
    whose view is not in the window hierarchy!
    

    这个警告是

    [self.window makeKeyAndVisible];
    之前拿
    self.window.rootViewController presentViewController:alertVc animated:YES completion:nil];
    导致的
    也是这三个⚠️里解决最容易的一个
    

    which is already presenting

    这个警告是

    我在didFinishLaunchingWithOptions里进行了
    self.window.rootViewController presentViewController:alertVc animated:YES completion:nil];
    又在applicationDidBecomeActive里进行了
    self.window.rootViewController presentViewController:alertVc animated:YES completion:nil];
    相当于间隔了1s?进行了两次self.window.rootViewController的present操作 
    显示这并不是合适的
    
    

    于是将代码修改为

     UIWindow *fK = [[UIApplication sharedApplication] keyWindow];
            //如果window已有弹出的视图,会导致界面无法弹出,页面卡死,这里需要先把视图关闭,再弹出
            if (fK.rootViewController.presentedViewController != nil) {
                [fK.rootViewController.presentedViewController dismissViewControllerAnimated:NO completion:nil];
               }
                [fK.rootViewController presentViewController:alertVc animated:YES completion:nil];
           }
    

    如上改完后_报了第三个警告⚠️也就是

    while a presentation is in progress!

    考虑到有可能是dismiss没执行完所以最终把代码改成这 总算没⚠️了

    UIWindow *fK = [[UIApplication sharedApplication] keyWindow];
            //如果window已有弹出的视图,会导致界面无法弹出,页面卡死,这里需要先把视图关闭,再弹出
            if (fK.rootViewController.presentedViewController != nil) {
                [fK.rootViewController.presentedViewController dismissViewControllerAnimated:NO completion:^{
                    
                    [fK.rootViewController presentViewController:alertVc animated:YES completion:nil];
                    
                }];
                
            }else{
                [fK.rootViewController presentViewController:alertVc animated:YES completion:nil];
            }
            
          }
    
    • 我确信这些⚠️之前见过 可能有时候不影响效果 稀里糊涂的就过去了
    • 但是我又确信如果一个问题 你不能彻底整明白 你放一百个心 不就的将来 你还会再次遇见 就是这么神奇
    • 所以很有必要给丫死磕到底 愚公移山

    鉴于能力有限 水平一般 理解有误之处 深望不吝指出 阿门!

    相关文章

      网友评论

          本文标题:whose view is not in the window

          本文链接:https://www.haomeiwen.com/subject/gefhmftx.html