【问题标题】:Warning: Attempt to present ZMNavigationController on **.ViewController whose view is not in the window hierarchy警告:尝试在视图不在窗口层次结构中的 **.ViewController 上呈现 ZMNavigationController
【发布时间】:2018-03-12 08:57:15
【问题描述】:

伙计们,我正面临NavigationController 的一个奇怪问题。现有的答案根本没有帮助!!!!

这是应用程序的基本场景:

  1. 有两个视图 - 主视图和第二视图
  2. 当我碰巧点击使用 segue 进入第二个视图时,主视图中有一个按钮。
  3. 在第二个视图中,当我在文本视图中输入某个字段并单击一个名为“加入”的按钮后,它会触发“joinMeeting()”函数 并且应该加入会议。

但是,当我这样做时,调试器会显示:

“警告:尝试在 其视图不在窗口中 等级制度!”

所以我已经阅读了大部分的胎面,并且考虑到它是由于 viewDidAppear 方法而发生的,但我必须在 viewDidAppear 之前完成第 n 个工作。点击按钮后一切都会发生。

joinMeeting() 被成功调用并且 print 方法返回 0 这意味着没有 issue(https://developer.zoom.us/docs/ios/error-codes/) 和成功的 SDK 连接但是在调试器中显示此 “警告” 错误之后,应用程序中没有任何反应。

如果有帮助,下面是触发 joinBtn 的代码:

/**
Triggers when Join Button is clicked from second view.
*/
    @IBAction func joinMeeting(_ sender: Any) {
            if( activityID.text == "" ) {
                let alert = UIAlertController(title: "Field is Blank", message: "Activity ID cannot be blank.", preferredStyle: UIAlertControllerStyle.alert)
                alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil))
                self.present(alert, animated: true, completion: nil)

                return;
            }


            let ms: MobileRTCMeetingService? = MobileRTC.shared().getMeetingService()
            if ms != nil {
                ms?.delegate = self;

                // //For Join a meeting
                let paramDict: [AnyHashable: Any] = [
                    kMeetingParam_Username: kSDKUserName,
                    kMeetingParam_MeetingNumber: activityID.text!,
                ]

                let ret: MobileRTCMeetError? = ms?.joinMeeting(with: paramDict)
                print("onJoinaMeeting ret:\(String(describing: ret))")
            }
        }

如果有人知道或知道我在这里缺少什么,请提供帮助。

【问题讨论】:

  • 哪行代码抛出了这个错误?
  • 在“let ret: MobileRTCMeetError? = ms?.joinMeeting(with: paramDict)”之后...触发错误
  • 那么您应该编辑您的问题以包含joinMeeting(with:) 的定义。如果没有Minimal, Complete and Verifiable example,您的问题将被视为离题。
  • 对此感到抱歉.. 稍微更新了问题。添加“joinMeeting() 成功”
  • ms?.joinMeeting(with: paramDict) 不能调用名为 joinMeeting 的 IBAction,因为它们的函数签名明显不同。似乎MobileRTCMeetingService 有另一种称为joinMeeting(with:) 的方法,这是您在有问题的线路上调用的方法,而不是joinMeeting(_:),它是连接到您的UIButton 的IBAction。

标签: ios swift sdk


【解决方案1】:

以下是解决问题的方法:

故事板配置: ViewController --Segue: Show--> JoinViewController

@IBAction func onClickJoin(_ sender: AnyObject) {
        //Main storyBoard
        let initialVC = UIStoryboard(name: "Main", bundle:nil).instantiateInitialViewController() as! UIViewController

        let appDelegate = (UIApplication.shared.delegate as! AppDelegate)

        appDelegate.window?.rootViewController = initialVC

        //Rest of the code
    }

【讨论】:

    【解决方案2】:

    只需在要执行调用的控制器上添加以下代码:

        override func viewWillAppear(_ animated: Bool) {
        let appDelegate = UIApplication.shared.delegate as? AppDelegate
      appDelegate?.window?.rootViewController  = self
    
    }
    

    【讨论】:

      【解决方案3】:

      不幸的是,以上解决方案都不适合我。 所以这是我的解决方案。

      添加这一行

      MobileRTC.shared().setMobileRTCRootController( self.navigationController)
      

      => 当用户点击加入通话按钮时。

      确保这些条件也应满足。

      1. 用于打开ZOOM会议的ViewController应该是根导航控制器的一部分
      2. 不要以模态方式显示当前的 Zoom 会议加入视图控制器。始终将其推送到根导航控制器。

      【讨论】:

        猜你喜欢
        • 2013-02-23
        • 1970-01-01
        • 2019-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-25
        • 1970-01-01
        • 2017-07-18
        相关资源
        最近更新 更多