微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建与PPT通信所需的CFMessagePort时出错

如何解决创建与PPT通信所需的CFMessagePort时出错

我尝试使用CNContactPickerViewController协议在SwiftUI应用程序中显示一个UIViewControllerRepresentable。正如我已经读过的那样,似乎有一个已知的问题无法解决,但使用here描述的解决方法,我可以正常工作。

但是,无论何时CNContactPickerViewController出现或消失,我的输出日志中都会出现以下错误

[PPT]创建与PPT通信所需的CFMessagePort时出错。

我试图找到对此的解释,但互联网上似乎没有任何答案。有人知道此错误来自何处以及PPT是什么?这个错误CNContactPickerViewController与SwiftUI无法正常工作有关吗?

我第一次在iOS 14 beta和Xcode 12 beta中注意到该错误,并且在带有Xcode 12.2的iOS 14.2中仍然存在。 我不知道该错误是否也出现在iOS 13上。
我已经发布了有关此问题的反馈报告。

解决方法

我使用托管 UINavigationController 编写了一个解决方法,这是我的代码:

import SwiftUI
import ContactsUI

struct ContactPickerView: UIViewControllerRepresentable {
    
    @Environment(\.presentationMode) var presentationMode
    
    func makeUIViewController(context: Context) -> UINavigationController {
        let navController = UINavigationController()
        let controller = CNContactPickerViewController()
        controller.delegate = context.coordinator
        navController.present(controller,animated: false,completion: nil)
        return navController
    }
    
    func updateUIViewController(_ uiViewController: UINavigationController,context: Context) {
        print("Updating the contacts controller!")
    }
    
    // MARK: ViewController Representable delegate methods
    func makeCoordinator() -> ContactsCoordinator {
        return ContactsCoordinator(self)
    }
    
    class ContactsCoordinator : NSObject,UINavigationControllerDelegate,CNContactPickerDelegate {
        let parent: ContactPickerView
        public init(_ parent: ContactPickerView) {
            self.parent = parent
        }
        
        func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
            print("Contact picked cancelled!")
            parent.presentationMode.wrappedValue.dismiss()
        }
        
        func contactPicker(_ picker: CNContactPickerViewController,didSelect contact: CNContact) {
            print("Selected a contact")
            parent.presentationMode.wrappedValue.dismiss()
        }
    }
}

我使用它:

Button("Select a contact") {
       openSelectContact.toggle()
}
 .sheet(isPresented: $openSelectContact,onDismiss: nil) {
       ContactPickerView()
     }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。