警告:尝试在视图不在窗口层次结构中的 **.ViewController 上呈现 ZMNavigationController
Posted
技术标签:
【中文标题】警告:尝试在视图不在窗口层次结构中的 **.ViewController 上呈现 ZMNavigationController【英文标题】:Warning: Attempt to present ZMNavigationController on **.ViewController whose view is not in the window hierarchy 【发布时间】:2018-03-12 08:57:15 【问题描述】:伙计们,我正面临NavigationController
的一个奇怪问题。现有的答案根本没有帮助!!!!
这是应用程序的基本场景:
有两个视图 - 主视图和第二视图 当我碰巧点击使用 segue 进入第二个视图时,主视图中有一个按钮。 在第二个视图中,当我在文本视图中输入某个字段并单击一个名为“加入”的按钮后,它会触发“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。
【参考方案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)
=> 当用户点击加入通话按钮时。
确保这些条件也应满足。
-
用于打开ZOOM会议的ViewController应该是根导航控制器的一部分
不要以模态方式显示当前的 Zoom 会议加入视图控制器。始终将其推送到根导航控制器。
【讨论】:
以上是关于警告:尝试在视图不在窗口层次结构中的 **.ViewController 上呈现 ZMNavigationController的主要内容,如果未能解决你的问题,请参考以下文章
警告:尝试呈现不在窗口层次结构中的视图!在 UISearchController
警告:尝试在视图不在窗口层次结构中的 **.ViewController 上呈现 ZMNavigationController
警告“尝试呈现视图不在窗口层次结构中的 ViewController - Objective C
警告:尝试在其视图不在窗口层次结构中的 ViewController 上呈现 ViewController (w/UIAlertController)