UIViewControllerRepresentable ошибка времени выполнения: Nib загружен, но выход розетки не был установлен. Почему? - PullRequest
1 голос
/ 23 февраля 2020

Я играю с доступом SwiftUI к UIViewController через протокол UIViewControllerRepresentable; используя Nib против создания экземпляров класса вручную.

Большая часть демонстрационного примера, который я видел, имеет экземпляр ViewController в коде; как показано ниже:

struct RicViewVC: UIViewControllerRepresentable {
    // Parameters ----------------------------
    // let url: URL
    @Binding var showingVC: Bool
    // ---------------------------------------

    // 1)
    func makeUIViewController(context _: Context) -> RicViewController {
        let viewController = RicViewController()
        Bundle.main.loadNibNamed("RicView", owner: viewController, options: nil)
        return viewController
    }

    // 2)
    func updateUIViewController(_: RicViewController, context _: Context) {}

    // 3
    func makeCoordinator() -> RicViewVC.Coordinator {
        Coordinator(showing: $showingVC)
    }

    class Coordinator: NSObject {
        @Binding var showingCoord: Bool

        init(showing: Binding<Bool>) {
            _showingCoord = showing
        }
    }
}

Однако это не работает, когда UIViewController связан с и IB:

Привет от RicViewController 2020-02-23 10: 53: 55.893551-0800

SafariRepresentable [9792: 151550] *** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: '- [UIViewController _loadViewFromNibNamed: bundle:] загрузил перо «RicView», но представление розетка не была установлена. '

Вот где я запутался. Как связать инстанцированный XIB IB в # 1 (см. Код выше): makeUIViewController ()? Какой синтаксис?

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Если ваш RicViewController является владельцем XIB, попробуйте следующее

let viewController = RicViewController(nibName: "_nib_name_here", bundle: nil) // if bundle not main the specify also bundle
return viewController
0 голосов
/ 24 февраля 2020

В моем представлении UIViewController был сольный UILabel, на который не было ссылок. После проб / ошибок и повторения аналогичной проблемы на StackOverFlow я обнаружил, что должен: 1) Установите для владельца файла значение 'RicViewController'; а также 2) Установите связь между одной UILabel V-1010 * -View и «view» инспектора соединений владельца файла.

enter image description here enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...