如何恢复AppDelegate并保留故事板?我觉得我错过了一些明显的东西.
解决方法
截至目前(Xcode Beta-2),新的基于文档的应用程序没有附带存根AppDelegate.swift文件.相反,有ViewController.swift和Document.swift.更糟糕的是,Document.swift文件错误地为文档实例化了相同的Main.storyboard.
这是我开始工作的一种方式:
>创建一个AppDelegate类(例如:采用NSApplicationDelegate协议的NSObject)
>将Object对象从Object库拖到Main.storyboard的Application Scene中,并将其设置为AppDelegate类.
>从Application Scene中的Application对象控制拖动到AppDelegate对象,并连接其委托.
>从Main.storyboard中删除其他所有内容,并为“文档”窗口创建一个新的Document.storyboard.更改Document.swift文件以实例化该Storyboard而不是Main.
>如果除了文档窗口之外还想要一个主应用程序窗口和/或首选项窗口,请为这些窗口创建Application.storyboard和/或Preferences.storyboard,并使用AppDelegate类对它们进行实例化.这样,AppDelegate可以自定义主窗口外观并执行其他方便的操作,包括接收从应用程序中的任何窗口发送的IBActions.
以下是基于文档的应用程序的AppDelegate.swift文件的工作示例,该应用程序还具有单独的主要应用程序窗口和非模态首选项窗口:
// AppDelegate.swift import Cocoa class AppDelegate: NSObject,NSApplicationDelegate { //init() { // super.init() // remove this if you don't use it //} var application: NSApplication? = nil func applicationDidFinishLaunching(notification: NSNotification) { application = notification.object as? NSApplication let path = NSBundle.mainBundle().pathForResource("Defaults",ofType: "plist") let defaults = NSDictionary(contentsOfFile:path) NSUserDefaults.standardUserDefaults().registerDefaults(defaults) NSUserDefaultsController.sharedUserDefaultsController().initialValues = defaults NSUserDefaultsController.sharedUserDefaultsController().appliesImmediately = true } func applicationDidBecomeActive(notification: NSNotification) { if application?.orderedDocuments?.count < 1 { showApplication(self) } } //func applicationWillFinishLaunching(notification: NSNotification) { // remove this if you don't use it //} func applicationWillTerminate(notification: NSNotification) { NSUserDefaults.standardUserDefaults().synchronize() } func applicationShouldOpenUntitledFile(app: NSApplication) -> Bool { return false } func applicationShouldTerminateAfterLastwindowClosed(app: NSApplication) -> Bool { return false } var applicationController: NSWindowController? @IBAction func showApplication(sender : AnyObject) { if !applicationController { let storyboard = nsstoryboard(name: "Application",bundle: nil) applicationController = storyboard.instantiateInitialController() as? NSWindowController if let window = applicationController?.window { window.titlebarappearsTransparent = true window.titleVisibility = NSWindowTitleVisibility.Hidden window.styleMask |= NSFullSizeContentViewWindowMask } } if applicationController { applicationController!.showWindow(sender) } } var preferencesController: NSWindowController? @IBAction func showPreferences(sender : AnyObject) { if !preferencesController { let storyboard = nsstoryboard(name: "Preferences",bundle: nil) preferencesController = storyboard.instantiateInitialController() as? NSWindowController } if preferencesController { preferencesController!.showWindow(sender) } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。