Macos 使用Swift从Nib创建视图控制器
我正在尝试遵循本教程: 但要用迅捷的方式 尝试执行“创建主视图控制器”步骤我有以下代码:Macos 使用Swift从Nib创建视图控制器,macos,cocoa,swift,Macos,Cocoa,Swift,我正在尝试遵循本教程: 但要用迅捷的方式 尝试执行“创建主视图控制器”步骤我有以下代码: import Cocoa class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet var window: NSWindow @IBOutlet var vc: MasterViewController? func applicationDidFinishLaunching(aNotification
import Cocoa
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet var window: NSWindow
@IBOutlet var vc: MasterViewController?
func applicationDidFinishLaunching(aNotification: NSNotification?) {
vc = MasterViewController(nibName: "MasterViewController", bundle: nil)
}
func applicationWillTerminate(aNotification: NSNotification?) {
// Insert code here to tear down your application
}
}
但是,在MasterViewController实例化中,我得到了错误:
找不到接受提供的参数的“\uuu转换”的重载
我做错了什么?我认为这是一个bug,因为文档中说bundle可以为零,但在swift中它是不允许的,抛出了那个错误 但是您可以将NSBundle.mainBundle()作为bundle传递,并且它可以工作 引用NSViewController文档: 要在其中搜索nib文件的包。如果指定nil,此方法将在主捆绑包中查找nib文件
这是由于一个bug xcode为Swift自动生成了初始化器 由于捆绑包可以为零,NSViewController的init的正确签名为:
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
但是,当您创建新的NSViewController子类时,xcode会为您创建一个init方法,并为其提供以下签名:
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle)
注意到失踪的人了吗?在NSBundle之后。这意味着您不能指定nil NSBundle
幸运的是,这只是代码自动生成器中的一个bug。您可以将NSBundle更改为NSBundle?或者,如果不使用init方法,您可以直接删除它。谢谢-它现在可以编译,但视图控制器不加载。我检查可选结果,结果为零。也许是另一个bug?谢谢,但是视图控制器仍然没有加载。你有OSX下的工作示例项目吗?