用Swift从Nib创建视图控制器

4

我想要跟随这个教程: 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时,我遇到了错误: 找不到接受提供的参数的'__conversion'重载。 我做错了什么?
2个回答

0

这是由于 Xcode 自动为 Swift 生成初始化程序时出现的一个 bug。

由于 bundle 可能为空,因此 NSViewController 的正确初始化程序签名是:

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

然而,当你创建一个新的NSViewController子类时,Xcode会为你创建一个初始化方法,并给出以下签名:

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

注意在NSBundle后面缺少了问号。这意味着您不能指定一个空的NSBundle。

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


谢谢你的回复,但视图控制器仍然无法加载。你有在OSX下的工作示例项目吗? - zorro2b

0

我认为这是一个错误,因为文档说bundle可以为空,但在Swift中不允许,会抛出错误。

但是你可以传递NSBunlde.mainBundle()作为bundle,它可以工作。

来自NSViewController文档的引用:

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


谢谢 - 现在它可以编译了,但视图控制器没有加载。 我检查了可选结果,它是nil。也许又是另一个bug? - zorro2b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接