在 AppDelegate 中,只要收到 VoIP 调用(推送通知),就会调用以下函数,从而创建“VideoCallViewController”的多个实例
我已经使用 deinit(在 VideoCallViewController 中),如下所示,以检查在创建“VideoCallViewController”的新实例之前是否取消了“VideoCallViewController”的先前实例,令我惊讶的是 print( “Deinitializing VC)
没有被调用,将实例留在内存中。
如果 AppDelegate 中已经存在 VideoCallViewController 实例,我如何显示 VideoCallViewController 及其导航 Controller 。
在 VideoCallViewController 中
deinit {
print("Deinitializing VC)
}
在 AppDelegate 中
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, forType type: PKPushType) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
videoVC = storyboard.instantiateViewController(withIdentifier: "VideoCallViewController") as! VideoCallViewController
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = videoVC
self.window?.makeKeyAndVisible()
}
最佳答案
您可以在 AppDelegate 中创建一个惰性变量
lazy var videoVC: UIViewController = {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
return storyboard.instantiateViewController(withIdentifier: "VideoCallViewController")
}()
然后在你的 pushRegistry 中:
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, forType type: PKPushType) {
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = self.videoVC
self.window?.makeKeyAndVisible()
}
关于ios - 避免创建多个 ViewController 实例,iOS Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46466660/