- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想从一个 nib 文件初始化一个窗口 Controller 对象,很简单吧?但我就是无法让它工作。
根据之前ObjC的经验,我写下了如下代码:
init() {
super.init(windowNibName: "SplitWindowController")
}
在应用委托(delegate)文件中,我简单地初始化并显示窗口:
var myWindowController: MyWindowController = MyWindowController()
myWindowController.showWindow(self)
myWindowController.window.makeKeyAndOrderFront(nil)
但是编译器给我这个错误:必须调用父类(super class)“NSWindowController”的指定初始化程序
。而根据Swift版本的NSWindowController
定义,只有3个designated初始化器,分别是init()
, init(window)
,初始化(编码器)
。我不知道下一步该怎么做。我应该从一个 nib 文件构建一个 NSCoder
吗,我不知道该怎么做?
最佳答案
你快到了。您确实可以以与您习惯的 Obj-C 代码等效的方式将 init()
重写为方便的初始化程序:
import Cocoa
class MyWindowController: NSWindowController {
override convenience init() {
self.init(windowNibName: "<xib name>")
}
}
请注意,您正在 self
上调用 init(windowNibName:)
,因为 init()
是一个方便的初始化程序,您仍然继承所有来自父类(super class)的初始化器。来自 documentation :
Rule 1: A designated initializer must call a designated initializer from its immediate superclass.
Rule 2: A convenience initializer must call another initializer from the same class.
Rule 3: A convenience initializer must ultimately call a designated initializer.
此外,正如@weichsel 上面提到的,确保将 File's Owner
的类设置为 NSWindowController
的子类(在上面的示例中,这将是 MyWindowController
) 和 然后将其 window
导出连接到窗口本身。
也就是说,我不确定为什么编译器要求添加 override
关键字。虽然 NSWindowController
是 NSResponder
的子类,它定义了一个 init()
,但下面的代码编译没有问题,即使它实现了一个等效的继承层次结构:
class A {
init() { }
}
class B: A {
init(Int) {
super.init()
}
convenience init(String) {
self.init(5)
}
}
class C: B {
convenience init() {
self.init("5")
}
}
关于cocoa - 如何在 Swift 中初始化 NSWindowController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24577131/
我正在 Xcode5 中用 cocoa 为 MacOSX 开发一个应用程序,我想通过按一个按钮从当前窗口打开另一个窗口,这是我的代码: - (IBAction)openWindow:(id)sende
我有一个扩展 NSWindowController 的 BrowserWindowController 类。我的应用程序委托(delegate)有一个 BrowserWindowController,
我的应用程序观察其 NSWindowController 的 document 属性,并在设置时执行一些 UI 设置。一旦设置完毕,就很难因更改而重建 UI(出于内部原因)。 一旦 NSWindowC
我有一个基于菜单栏的应用程序,单击图标时会显示一个窗口。在 Mac OS X Lion 上一切正常,但由于某种原因,在 Snow Leopard 和早期版本的 Mac OS X 上会出现错误。任何时候
我对 Mac 编程非常陌生。三天前刚开始。 我正在制作一个示例应用程序,其中主窗口中有一个按钮 我正在使用此代码打开一个新的 wndowcontroller ThirdViewController *
我有一个包含在 nib 文件中的窗口,该窗口由 NSWindowController 的自定义子类加载,如下所示: - (id)init { self = [super initWithWin
我是 Cocoa 编程新手。 我有一个主 NSWindowController 并且想打开第二个子 NSWindowController。无论如何似乎找不到代码。 有人可以帮忙吗? 最佳答案 不确定这
如何处理单击 NSWindowController 的红色关闭按钮的事件? 询问的原因是我在新的 NSWindowController 窗口中播放视频,当用户单击红色关闭按钮时,音频继续播放,因此我想
我正在努力使这段代码工作: class MyWindowController: NSWindowController { let thing: Thing convenience init(t
我正在创建一个 cocoa 应用程序,并且正在使用 NSWindowController 加载首选项窗口。 当用户选择首选项按钮并打开首选项窗口时 我希望应用程序强制用户在返回到后台应用程序之前完成他
我正在通过自定义方法创建并显示一个 NSWindow,它恰好是我的首选项菜单: - (void)openPreferencesWindow{ if (![self.windowControll
有一个小问题,我正忙于创建 OSX 应用程序。在我的第一个 View (appdelegate)中,我得到了一个登录屏幕,但是在用户登录后我想要(翻转登录 Controller (main.xib)以
我创建了一个 NSWindow xib 文件,我想通过单击另一个窗口中的按钮来打开该文件。 现在,为了控制 NSWindow 的行为,我从 xib 中的库中拖动了一个对象,并将其更改为我在 XCode
我有一个使用 NSWindowController 子类的简单 Cocoa 应用程序。在我设置的 Nib 中: 将所有者的类文件保存到我的 NSWindowController 子类 文件所有者到 N
我有一个 NSWindowController,它显示一个表格并使用另一个 Controller 作为 NSTableView 的数据源和委托(delegate)。第二个 Controller 显示来
我一直在一个小型 Mac 应用程序中使用 Swift。 我一直在尝试添加一个非可选实例变量,但似乎我必须重写两个 init 方法。我最终得到的(编译的)代码如下所示: class CustomWind
我目前正在尝试构建一个菜单栏应用程序。因此,我需要一个 NSWindowController 作为登录字段。必须可以在按下菜单项时打开此 NSWindowController,并在用户单击取消时关闭该
我目前正在 NSWindowController 中搜索类似 viewDidAppear() 的函数。对于我的应用程序,我需要显示 NSWindowController 几次,然后使用 NSApp.h
我正在构建一个 Cocoa 应用程序并且有一个关于使用窗口 Controller 的问题。这个想法是,如果用户从菜单栏中选择新建,则会创建一个 MyWindowController 的实例,它是 NS
在this据说可以通过从 MainMenu.xib 中删除窗口并从 applicationDidFinishLaunching: 中“手动”实例化窗口 Controller 来获得自定义 NSWind
我是一名优秀的程序员,十分优秀!