转换为`.compact`表示样式后,`activeConversation`为`nil`

时间:2016-09-05 18:31:13

标签: ios ios10 xcode8 ios-extensions imessage

问题

在Messages框架应用(iOS 10 beta 8)中,我可以使用以下方式访问Messages扩展程序中的activeConversation

    guard let conversation = activeConversation else {
        print("unable to create activeConversation")
        return
    }

这适用于compact演示文稿样式(首次加载时)和expanded演示文稿样式(始终)。

compact转换为expanded,然后再转为compact后,activeConversation始终为nil

(请注意,在activeConversation演示文稿样式中,expanded 从不为零。)

切换视图控制器

辅助方法

MessagesViewController.swift中,我正在使用此代码切换视图控制器:

extension MessagesViewController {
    func switchTo(viewController controller: UIViewController) {

        // Remove existing child view controller
        for child in childViewControllers {
            child.willMove(toParentViewController: .none)
            child.view.removeFromSuperview()
            child.removeFromParentViewController()
        }

        addChildViewController(controller)

        controller.view.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(controller.view)

        NSLayoutConstraint.activate([
            controller.view.leftAnchor.constraint(equalTo: view.leftAnchor),
            controller.view.rightAnchor.constraint(equalTo: view.rightAnchor),
            controller.view.topAnchor.constraint(equalTo:
                topLayoutGuide.bottomAnchor),
            controller.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
            ])
        controller.didMove(toParentViewController: self)
    }
}

生命周期方法覆盖

switchTo(controller:)覆盖:

中调用此willTransitionTo(presentationStyle:)辅助方法
override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
    super.willTransition(to: presentationStyle)

    if presentationStyle == .expanded {
        guard let controller = storyboard?.instantiateViewController(withIdentifier: "expandedVC") as? ExpandedViewController
        else {
            fatalError("Unable to instantiate expandedVC")
        }
        controller.delegate = self
        switchTo(viewController: controller)
    }
    else { // .compact
        guard let controller = storyboard?.instantiateViewController(withIdentifier: "messagesViewController") as? MessagesViewController
        else {
            fatalError("Unable to instantiate an MessagesViewController")
        }
        switchTo(viewController: controller)
    }
}

可能出现的问题

  1. 查看层次结构问题?

    我检查了Xcode中的视图层次结构工具,我没有发现任何突出的问题(尽管因为它是一个新工具,我可能会错误地阅读它)。我似乎也没有任何内存泄漏。

  2. 测试版中的错误?

    其他人是否有问题可靠地访问activeConversation?如果是这样,也许这只是测试版中的一个错误。

0 个答案:

没有答案