从 Objective-C 加载基于 Swift 的 UIViewController

Loading a Swift based UIViewController from Objective-C

我正在尝试加载一个视图控制器 nib,其文件所有者是一个基于 Swift 的 UIViewController class。此时的视图控制器非常简单——只有一个标签 (lblResult),其内容在运行时设置。加载视图控制器时,出现以下错误:

this class is not key value coding-compliant for the key lblResult

我知道这通常是因为文件的所有者没有在 Interface Builder 中设置,但是,在我的例子中它是设置的。我已验证 lblResult 的 IBOUtlet 已正确设置,并且视图 属性 也已正确设置。这里唯一真正的区别是我试图在用 Objective-C.

编写的应用程序中加载基于 swift 的视图控制器

在我的视图控制器中 class 我将 UILabel 属性 设置如下:

@IBOutlet weak var lblResult: UILabel!

并将其值设置如下:

lblResult.text = "Time \(hour):\(minute):\(second)"

在我的 Obj-C 调用 class 中,我按如下方式实例化视图控制器:

viewController = [[UIViewController alloc] initWithNibName:@"SwfViewController" bundle:nil];

当没有设置插座时笔尖加载到视图中,但是当有 IBOutlets 时,我得到错误。关于为什么会发生这种情况的任何线索?谢谢!

这个视图控制器是否存在于您的情节提要中?如果是,则需要通过调用加载view controller。

viewController = self.storyboard?.instantiateViewControllerWithIdentifier("SwfViewController") as SwfViewController

确保将情节提要中的视图控制器的标识符设置为 SwfViewController。

故事板应该看起来像这样。

如果您的 nib 是一个视图并且所有者是一个视图控制器,请确保将您的视图控制器的 view 属性 连接到 nib 视图。如果您的 nib 是一个视图控制器,而不是设置文件所有者,只需将视图控制器的 Custom Class 设置为 SwfViewController。