【问题标题】:How to remove SFSafariViewController as a child view controller correctly?如何正确删除 SFSafariViewController 作为子视图控制器?
【发布时间】:2016-02-24 09:41:40
【问题描述】:

我正在使用this SO answer 提供的技术在 SFSafariViewController 中预加载一些 URL,如下所示:

addChildViewController(svc)
svc.didMoveToParentViewController(self)
view.addSubview(svc.view)

我尝试使用以下代码删除 Safari 视图控制器:

svc.willMoveToParentViewController(nil)
svc.view.removeFromSuperview()
svc.removeFromParentViewController()

现在我可以毫无问题地预加载 URL 并显示 Safari 视图。但是,在我重复该过程(预加载/显示/删除)几次(可能超过 30 次)后,应用程序将由于一些内存问题而崩溃,因为当应用程序崩溃时日志显示Memory level is not normal or this app was killed by jetsam

在崩溃之前,我看到了一些关于可能泄漏警告的日志:

<Warning>: notify name "UIKeyboardSpringBoardKeyboardShow" has been registered 20 times - this may be a leak

<Warning>: notify name "com.apple.SafariViewService-com.apple.uikit.viewService.connectionRequest" has been registered 20 times - this may be a leak

删除 Safari 视图控制器时我是否正确执行此操作?我错过了什么吗?或者有什么解决这个问题的建议?

【问题讨论】:

    标签: ios swift childviewcontroller sfsafariviewcontroller


    【解决方案1】:

    如果您添加的子视图控制器代码如您在上面指定的那样,那么我认为它的顺序应该根据文档有所不同。

    addChildViewController(svc)
    view.addSubview(svc.view)
    svc.didMoveToParentViewController(self)
    

    您应该先添加子视图,然后调用 didMoveToParentViewController。试试这个,看看它是否有效。

    清单 5-1 将子视图控制器添加到容器中

    • (void) displayContentController: (UIViewController*) content { [self addChildViewController:content]; content.view.frame = [自我 框架内容控制器]; [自我.view addSubview:self.currentClientView]; [内容 didMoveToParentViewController:self]; }

    在前面的示例中,请注意您只调用 didMoveToParentViewController:子方法。那是因为 addChildViewController: 方法调用孩子的 willMoveToParentViewController: 适合你的方法。 你的原因 必须自己调用 didMoveToParentViewController: 方法是 在嵌入孩子的视图之前无法调用该方法 进入容器的视图层次结构。

    【讨论】:

    • 尝试了建议的顺序,但仍然存在同样的问题。
    • 您能使用 WKWebkitView 并将其作为子视图添加到您的主 VC 中而不是使用 SVC 吗?
    • 您能否将整个代码发送给我进行测试或演示此问题的示例原型?
    【解决方案2】:

    您可能正在泄漏svc。删除后将其归零。

    svc.willMoveToParentViewController(nil)
    svc.view.removeFromSuperview()
    svc.removeFromParentViewController()
    svc = nil
    

    如果这不能解决问题,请尝试启用僵尸或使用泄漏工具

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      相关资源
      最近更新 更多