使用Swift从Nib创建视图控制器

时间:2014-06-13 10:56:33

标签: macos cocoa swift

我正在尝试按照本教程: http://www.raywenderlich.com/17811/how-to-make-a-simple-mac-app-on-os-x-10-7-tutorial-part-13

但是在Swift中这样做。

尝试创建主视图控制器步骤我有以下代码:

    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实例化中,我收到错误: 找不到' __转换的重载'接受提供的参数

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我认为这是一个错误,因为文档说bundle可以是nil但是很快就不允许,抛出错误。

但是你可以将NSBundle.mainBundle()作为bundle传递它并且它可以工作。

引自NSViewController文档:

  

要在其中搜索nib文件的包。如果指定nil,则此方法在主包中查找nib文件。

答案 1 :(得分:0)

这是由于xcode自动生成Swift初始化程序的错误。

由于bundle可以是nil,因此NSViewController的init的正确签名是:

init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)

但是,当你创建一个新的NSViewController子类时,xcode会为你创建一个init方法,并给它这个签名:

init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle)

注意失踪?在NSBundle之后。这意味着您无法指定nil NSBundle。

幸运的是,这只是代码自动生成器中的一个错误。您可以将NSBundle更改为NSBundle吗?或者你可以删除init方法,如果你不使用它。