ios - 用 Swift 编写的类不能是 Nib 所有者(崩溃)

标签 ios swift nib key-value-coding

这是我正在尝试做的事情: 在 nib 文件中设计一个 View 。使用用 Swift 编写的类支持 View 和 nib 所有者。在 Swift 中实例化 nib 的 View 。崩溃的代码:

var myViewOwner: MyViewOwner?
NSBundle.mainBundle().loadNibNamed("MyView", owner: myViewOwner, options: nil) // crash

...错误:

[NSObject 0x7bfa0cc0 setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key myView.

因此,我有:带有空白 View 的 nib 文件,其中 View 的类型为 MyClass,nib 所有者的类型为 MyViewOwner。两个类都用 Swift 编写。

我已经尝试过的(初次尝试):

我将只发布 MyViewOwner 类代码,因为 MyView.swift 只是一个类定义。

MyViewOwner.swift

class MyViewOwner {
    @IBOutlet weak var myView: MyView
}

导致上述错误。

第二次尝试使用 NSObject:

当然 Swift 对象不符合 KVO,所以我尝试:

class MyViewOwner: NSObject {
    @IBOutlet var myView: MyView
}

...和:

class MyViewOwner: NSObject {
    @IBOutlet strong var myView: MyView = MyView() // we need to set something since it's 'strong'
}

两者都导致了上面的错误。

第 3 次尝试使用 @objc 注释:

@objc class MyViewOwner: NSObject {
    @objc @IBOutlet strong var myView: MyView = MyView()
}

也没有帮助,同样的错误。

我做错了什么?我应该以何种方式快速编写所有代码以使其工作?


更新:xCode 中的所有者和 View 设置

enter image description here enter image description here

更新:所有者查看连接

enter image description here

最佳答案

这段代码,如果它真的是你的代码,是没有意义的:

var myViewOwner: MyViewOwner?
NSBundle.mainBundle().loadNibNamed("MyView", owner: myViewOwner, options: nil)

第一行 中的变量myViewOwner 未初始化;那里没有物体。因此,该对象不能作为任何东西的 owner:,正如您在 second 行中要求的那样。

也许你的意思是:

let myViewOwner = MyViewOwner() // or whatever the initializer is
NSBundle.mainBundle().loadNibNamed("MyView", owner: myViewOwner, options: nil)

关于ios - 用 Swift 编写的类不能是 Nib 所有者(崩溃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24841020/

相关文章:

ios - 从堆栈中弹出导航 Controller /创建双 View

ios - 如何访问 tableView 的标准 viewForHeaderInSection?

swift - 点击按钮上的响应式 API 调用会产生泄漏

ios loadNibNamed 到父类(super class)

ios - 动态移动(动画)UITextField

ios - 软件查找服务返回的结果无效

ios - 在 UIwebView 应用程序中使用 Facebook 登录

iOS 11 应该通过 App Delegate 方法或仅通过 UNDelegate 方法处理推送通知

ios - NIB 的 UITableViewCell 中的子类 UIView

iphone - 将 NIB 文件加载到 UIView 时遇到问题