NSUnknownKeyException when connecting property IB

I am trying to integrate a UIKit view into my SwiftUI project using UIViewRepresentable as an intermediate.

A TestViewVC.swift file was created containing just a simple IBOutlet:

import Foundation
import UIKit

class TestViewVC: UIViewController {
    @IBOutlet weak var testLabel: UILabel!
}

A corresponding TestViewVC.xib file was creating containing just a single label centred on screen. The TestViewVC was then assigned as the File Owner's class.

These are then displayed within the SwiftUI context through the use of a TestRepresentableView.swift and TestViewVC.swift class (shown below).


//TestRepresentableView.swift

import SwiftUI

struct TestRepresentableView: UIViewRepresentable {
    func makeUIView(context: Context) -> UIView {
        // Load the XIB file and return its view
        let nib = UINib(nibName: "TestViewVC", bundle: nil)
        return nib.instantiate(withOwner: nil, options: nil)[0] as! UIView
    }
    
    func updateUIView(_ uiView: UIView, context: Context) {
        // Update the view here if needed
    }
}

//TestViewVC.swift 

import SwiftUI

@main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            TestRepresentableView()
        }
    }
}

The app runs fine on debug however an NSUnknownKeyException is raised whenever label is connected to the IBOutlet. (Or any other outlet for that matter, even simply connecting the view results in the same error).

Any idea of which this is happening?

Replies

Is there a reason you are using a xib file and an IBOutlet to show a single label?

It would be easier to create the label in code inside the makeUIView function.

If you have a more complex view that requires a xib file or storyboard, use UIViewControllerRepresentable to create a view controller instead of using UIViewRepresentable for a single UI view.