【问题标题】:Loading a Swift based UIViewController from Objective-C从 Objective-C 加载基于 Swift 的 UIViewController
【发布时间】:2015-10-11 00:50:09
【问题描述】:

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

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

我知道这通常是因为没有在 Interface Builder 中设置文件的所有者,但是在我的情况下它是设置的。我已验证 lblResult 的 IBOUtlet 已正确设置,并且 view 属性也已正确设置。这里唯一真正的区别是我试图在一个用 Objective-C 编写的应用程序中加载基于 swift 的视图控制器。

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

@IBOutlet weak var lblResult: UILabel!

并将其值设置如下:

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

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

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

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

【问题讨论】:

    标签: ios objective-c swift interface-builder


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这个视图控制器是否存在于您的故事板中?如果是,则需要通过调用来加载视图控制器。

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

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

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

      【讨论】:

      • 现有应用不使用情节提要。我正在研究确定如何将 Swift 集成到这个应用程序中
      • 在这种情况下你需要添加这个来加载视图控制器:viewController = SwfViewController(nibName: "SwfViewController", bundle: nil);
      • 还要确保你的 SwfViewController 有这个方法:init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Custom initialization }
      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 2014-09-13
      • 2017-09-27
      • 2019-04-20
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      相关资源
      最近更新 更多