Swift NSViewController.init(nibName:bundle:)

Swift NSViewController.init(nibName:bundle:),swift,nsviewcontroller,Swift,Nsviewcontroller,重写NSViewController.init(nibName…)可以在空项目中被重写,但不能在我的大项目中被重写!我的项目如何影响这一点 设置:我将以下内容添加到一个空项目中,它可以很好地编译: class FooNsVc : NSViewController override init(nibName nibNameOrNil:NSNib.Name?, bundle nibBundleOrNil:Bundle?) { super.init(nibName:nibNameOrNil,

重写NSViewController.init(nibName…)可以在空项目中被重写,但不能在我的大项目中被重写!我的项目如何影响这一点

  • 设置:我将以下内容添加到一个空项目中,它可以很好地编译:

    class FooNsVc : NSViewController 
    override init(nibName nibNameOrNil:NSNib.Name?, bundle nibBundleOrNil:Bundle?) {
        super.init(nibName:nibNameOrNil, bundle:nibBundleOrNil)
        loadView()
    }
    }
    
  • 错误:当我将它放到应用程序中时,会出现编译错误:
    初始值设定项不会覆盖其超类中指定的初始值设定项
    为什么。我已删除NSViewController及其超类NSResponder和NSObject的所有扩展。同样的症状

  • 有趣的是:将第2行和第3行替换为以下内容会使其编译

      init(nibName nibNameOrNil:NSNib.Name?, bundle nibBundleOrNil:Bundle?) {
          super.init(nibName:nibNameOrNil, bundle:nibBundleOrNil)
    
  • 但是
    loadView()
    中的错误无法加载nibName:在捆绑包中(null)
    atominstit.xib存在,它显示在Assets/xib/atominstit.xib中,从工作的OBJC项目复制到那里

  • 我开始黑客攻击,一个小时后,我的应用程序的18K行数下降到3K。但是虫子溜走了


  • 我又做了一次,错误又溜走了。

    你如何实例化
    FooNsVc
    FooNsVc
    是否依赖于
    atominstit.xib
    ?实际上,FooNsVc根本没有实例化!编译问题发生在定义它时。此外,我只是将xib包含在“空”项目中,并实例化了FooNsVc()(在ApplicationIDFinishLaunching中)。它执行时没有错误(尽管我对生成的FooNsVc不做任何处理)。您显示的第一个代码没有编译,因为它缺少一个大括号。但是如果我们把大括号放进去,那么只要您还实现了
    init(coder:)
    ,您的代码就可以编译。因此,不可能根据您所说的重现问题。是的,需要“{”字符。谢谢。(它在将内容粘贴到堆栈溢出中时丢失了。(那里没有emacs键绑定))