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

vol*_*ate 31 ios swift cncontact swiftui

我尝试CNContactPickerViewController使用该UIViewControllerRepresentable协议在 SwiftUI 应用程序内部呈现。正如我已经阅读的那样,似乎有一个已知问题无法正常工作,但我使用此处描述的解决方法使其正常工作。

但是,每当CNContactPickerViewController出现或取消响应时,我的输出日志中都会出现以下错误:

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

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

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

cs4*_*der 4

我使用托管编写了一个解决方法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()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

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