用Swift编写的类不能是Nib Owner(Crash)

Kee*_*nle 1 key-value-coding nib ios swift

这是我想要做的:在nib文件中设计一个视图.使用Swift编写的类返回视图和nib所有者.在Swift中实例化nib的视图.崩溃的代码:

var myViewOwner: MyViewOwner?
NSBundle.mainBundle().loadNibNamed("MyView", owner: myViewOwner, options: nil) // crash
Run Code Online (Sandbox Code Playgroud)

......有错误:

[NSObject 0x7bfa0cc0 setValue:forUndefinedKey:]:此类与密钥myView不符合密钥值编码.

所以,我有:带有空白视图的nib文件,其中视图是类型的类型MyClass和nib所有者MyViewOwner.这两个类都是用Swift编写的.

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

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

MyViewOwner.swift

class MyViewOwner {
    @IBOutlet weak var myView: MyView
}
Run Code Online (Sandbox Code Playgroud)

上面引起的错误.

NSObject的第二次尝试:

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

class MyViewOwner: NSObject {
    @IBOutlet var myView: MyView
}
Run Code Online (Sandbox Code Playgroud)

......和:

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

两者都导致错误.

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

@objc class MyViewOwner: NSObject {
    @objc @IBOutlet strong var myView: MyView = MyView()
}
Run Code Online (Sandbox Code Playgroud)

没有帮助,同样的错误.

我做错了什么?我应该以什么方式编写swift中的所有代码才能使其工作?


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

在此输入图像描述 在此输入图像描述

更新:所有者查看连接

在此输入图像描述

mat*_*att 5

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

var myViewOwner: MyViewOwner?
NSBundle.mainBundle().loadNibNamed("MyView", owner: myViewOwner, options: nil)
Run Code Online (Sandbox Code Playgroud)

变量myViewOwner第一行是未初始化的; 那里没有任何对象.因此,对象不能像owner:任何东西那样起作用,正如你要求它在第二行中所做的那样.

也许你的意思是:

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

  • 我很高兴您在问题中准确地复制了您的代码.我对这段代码感到非常惊讶,我担心这只是问题本身的一个错字!:) - 说了这么多,你发现了一个很好的例子,Swift编译器并不像它应该的那样聪明; 您可能应该向Apple提交错误报告,抱怨编译器永远不应该让代码首先运行. (3认同)