AppDelegate for Cocoa 应用程序在 Xcode 6 中使用 Storyboards

2023-11-23

我有一个现有的 OS X 应用程序,在转换为 Storyboards 作为主界面后,我的应用程序委托不再被使用。之前,MainMenu.xib 有一个“App Delegate”对象,我可以将其类设置为我的应用程序委托。然而,故事板不包含这样的对象。

如何取回我的 AppDelegate 并保留故事板?我觉得我错过了一些明显的东西。


如果您没有将其指定为基于文档的应用程序,Xcode 将创建一个 AppDelegate.swift 类并将其连接到应用程序场景中。

截至目前(Xcode Beta-2),新的基于文档的应用程序不附带存根 AppDelegate.swift 文件。相反,有 ViewController.swift 和 Document.swift。更糟糕的是,Document.swift 文件错误地实例化了文档的同一个 Main.storyboard。

这是我让它发挥作用的一种方法:

  1. 创建一个AppDelegate类(例如:采用NSApplicationDelegate协议的NSObject)

  2. 从对象库中拖动一个对象对象到 Main.storyboard 的应用程序场景中,并将其设置为 AppDelegate 类。

  3. 按住 Control 键并从应用程序场景中的应用程序对象拖动到 AppDelegate 对象,并连接其委托。

  4. 从 Main.storyboard 中删除所有其他内容,并为文档窗口创建一个新的 Document.storyboard。更改 Document.swift 文件以实例化 Storyboard 而不是 Main。

  5. 如果除了文档窗口之外,您还希望拥有主应用程序窗口和/或首选项窗口,请为这些窗口创建 Application.storyboard 和/或 Preferences.storyboard,并使用 AppDelegate 类来实例化它们。这样,AppDelegate 可以自定义主窗口外观并执行其他方便的操作,包括接收从应用程序中的任何窗口发送的 IBAction。

以下是基于文档的应用程序的 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) }
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AppDelegate for Cocoa 应用程序在 Xcode 6 中使用 Storyboards 的相关文章

  • 从 Angularjs 应用程序中的 iOS Webview 调用 Javascript 函数

    我的问题是 当我尝试从 UIWebView 中调用 AngularJS 应用程序中存在的 javascript 函数时 该函数无法识别 当我在典型的 html 结构中调用该函数时 该函数会按预期被识别 下面提供的示例 目标 C void v
  • 如何在Mac的cocoa应用程序中允许用户的主文件夹的权限

    我有一个 Mac 应用程序 其中我正在从用户的主目录中删除一些数据 我的应用程序被拒绝 原因如下 The app only finds files in the Downloads folder It would be appropriat
  • 用强/弱自我打破保留周期

    我读过关于强 弱的帖子self打破保留周期 但我仍然对它们如何工作感到困惑 我理解使用 weak typeof self weakSelf self创建对自我的弱引用 但我对强引用感到困惑 据我了解 强引用是指对self这样它就不会在块结束
  • 我无法让 HealthKit 工作。缺失的权利

    我很难让 HealthKit 为我的 iOS 应用程序工作 我已经完成了所有步骤到目前为止我已经找到了 http jademind com blog posts healthkit api tutorial 似乎没有一个能解决我的问题 当我
  • 如何在 Mac OS X 的 Cocoa 上绘制文本内阴影

    如何在 Cocoa for Mac OS X 中的文本上绘制内部阴影 我对 NSView 进行子类化 以创建一个带有渐变背景和内部阴影文本标题的占位符控件 stackoverflow 上所有当前 Core Graphics 的答案似乎都解释
  • 使用 NSCoder 编码 CGPoint 结构

    如何编码和解码CGPoint结构使用NSCoder 编码 CGPoint point point from somewhere NSValue pointValue NSValue value point withObjCType enco
  • NSPredicate 格式字符串不起作用

    在我的代码中 我想检查记录是否已存在 以便我知道是创建它还是更新它 但我遇到了一个问题 问题是当我使用这个时 NSPredicate pred NSPredicate predicateWithFormat ATTRIBUTE ID idN
  • 呈现 UIActivityViewController 时发出警告

    当我提出一个UIActivityController使用我得到的下面的代码 它被呈现 但控制台显示 Warning Attempt to present
  • Cocoa - 在另一个 xib 上显示 xib

    谁能告诉我如何 或指导我有关信息 在另一个 xib 笔尖 上显示 xib 笔尖 我希望如何放置它 以便我可以以编程方式将它移动到主笔尖 就像这样 这显然不起作用 void drawRect NSRect dirtyRect NSRect c
  • 使用 Xcode 6 和(可能)cocoapods 生成错误

    在构建使用 cocoapods 和最新 Xcode 6 GM 版本的 iOS 项目时 我收到以下静态分析器错误 error error reading pic error no analyzer checkers are associate
  • 每个 CPU 核心处于 C0 电源状态的时间

    任何帮助弄清楚如何做到这一点都会很棒 在过去一秒内 每个 CPU 核心处于 C0 电源状态的时间有多少 这是针对 Mac 应用程序的 因此需要 Objective C cocoa 和 c OS X 没有任何公开 CPU c 状态的 API
  • Apple 如何在机场菜单打开时更新它? (当 NSMenu 已经打开时如何更改它)

    我有一个状态栏项目 可以弹出一个 NSMenu 并且我有一个委托集 并且它已正确连接 void menuNeedsUpdate NSMenu menu工作正常 也就是说 该方法设置为在显示菜单之前调用 我需要监听该方法并触发异步请求 稍后在
  • 如何用Block简化回调逻辑?

    假设我需要与一个提供协议的类进行通信 并在操作完成时调用委托方法 如下所示 protocol SomeObjectDelegate required void stuffDone id anObject void stuffFailed e
  • 使用 Cocoa/OSX 合并/堆叠两个图像

    我有一个 CGImageRef 我们称之为原始图像 和一个透明 png 水印 我正在尝试编写一种方法将水印放置在原始内容之上 并返回 CGImageRef 在 iOS 中 我会使用 UIKit 将它们绘制到上下文中 但这在 OSX 中似乎不
  • 无法按住 CTRL+拖动 NSButton 到自定义 NSView 标题

    我想创建一个自定义的NSTableCellView由 Interface Builder 实例化 我已将 Table Cell View 类设置为MyTableCellView 并正确创建MyTableCellView NSTableCel
  • 在 Xcode 6 中定位 iOS 7.1 或 7.0 时,应用程序中出现黑条

    重现步骤 使用Xcode6创建一个新项目 单视图模板 仅限iPhone Objective C 导航到项目设置并将部署目标从 8 0 更改为 7 1 在安装了 7 1 的 iPhone5 S 或 iPhone5 s 7 1 模拟器中运行应用
  • 从 cocoa 编辑系统偏好设置

    有没有办法使用可可以编程方式编辑系统首选项 是否需要一些框架 我需要这样做来更改全局代理设置 另外 我的应用程序是沙盒的 有关于如何执行此操作的示例代码吗 感谢您的帮助 您正在寻找系统配置框架 但这并不容易 我认为沙盒应用程序不可能这样做
  • 避免“在此块中强烈捕获自身可能会导致保留周期”消息

    每次我必须在块内使用全局变量或属性时 如下所示 self save if isItSaving NO self saveMyFile 我必须像这样重写 BOOL iis isItSaving id myself self self save
  • NSView 中 CALayers 的简单示例

    我正在尝试将多个 CALayer 添加到 NSView 但显示时我的视图仍然为空 这是我的代码 id initWithFrame NSRect frame self super initWithFrame frame if self sel
  • 如何使用 iconutil 手动创建 icns 文件?

    当我验证我的应用程序时 出现此错误 应用程序包不包含 ICNS 格式的图标 同时包含512x512 and a 512x512 2x image 我用来制作 icns 图标Img2icns http www img2icnsapp com

随机推荐

  • MongoDB:跨集合查询

    假设这样的设置 blogposts title Example slug example post tags foo bar title Example2 slug example2 tags foo news headline Test
  • CSRF 失败:CSRF 令牌丢失或不正确

    我正在使用 Django 1 7 和 django rest framework 我创建了一个 API 它返回一些 JSON 数据 将其放入我的settings py REST FRAMEWORK DEFAULT PERMISSION CL
  • 结构构造函数:“在控制权返回给调用者之前,必须完全分配字段。”

    这是我正在尝试编写的结构 public struct AttackTraits public AttackTraits double probability int damage float distance Probability pro
  • Android 材料设计

    新的Android Material Design是否支持旧版本的Android 例如3 0或2 1 如果支持的话会是什么样子 作为真正的材料设计还是只是旧设计 我即将使用材料设计主题更新我的应用程序 那么有人已经这样做了吗 就材料设计这一
  • 为什么 mac chrome 上的选择框不响应点击事件? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery 函数不适用于 Mac 上的 Chrome 但适用于 Win 7 上的 Chrome 和所有其他浏览器 我有一个选择选项列表 div class social option div
  • 带标题的 window.open

    我可以控制发送的 HTTP 标头吗window open 跨浏览器 如果没有 我可以以某种方式window open然后在弹出窗口中使用自定义标头发出我的请求的页面 我需要一些狡猾的技巧 我可以控制window open 跨浏览器 发送的H
  • 在 Android Marshmallow 中请求多个蓝牙权限

    我正在开发一个具有连接功能的应用程序 该应用程序连接到使用 SDK 23 进行编译的蓝牙设备 我在请求蓝牙的多个权限时遇到问题 这是我到目前为止所做的 Override public void onStart super onStart i
  • 这里如何去掉trace0呢?

    信息 trace0 始终显示在蓝线的悬停文本框旁边 如何删除它 为什么不在橙线上 Trace0到底是什么意思 library plotly fig lt plot ly fig lt fig gt add trace type scatte
  • C#更改框架错误

    我正在运行 Visual Studio 2010 我只是将项目的框架从 4 0 更改为 3 5 我删除了它要求我删除的引用 Microsoft Framework 然后尝试编译 我现在收到错误 错误 1 无法加载文件或 装配 系统 绘图 版
  • 海湾合作委员会优化?漏洞?及其对项目的实际意义

    我的问题分为三个部分 问题1考虑下面的代码 include
  • 从路径字符串中获取类似树的结构

    我已经被困了两天了 因为我对指针和递归不太坚定 我有一系列类似路径的结构 可以说 s string a b c a b g a d 具有这样的数据结构 type Node struct Name string json name Child
  • 如何在RecyclerView中选择和取消选择项目?如何仅在回收者视图中突出显示所选项目?

    Override public void onBindViewHolder final mainscreenspecializationadap MyViewHolder holder final int positionz this po
  • 如何访问ThreadPoolExecutor内部正在运行的线程?

    我有一个正在运行的线程队列 并且希望在执行时公开其一些数据 以监视进程 ThreadPoolExecutor提供对其队列的访问 我可以迭代这些对象来调用我的重写toString 方法 但这些只是等待执行的线程 有没有办法访问当前正在运行的线
  • CSS Translate:translate() 属性最终的用途是什么?

    在 CSS3 中 动画是在各种供应商前缀下引入的 并带有过渡属性 现在 至少在纯 CSS 中 有两种方法可以使元素改变位置 将元素的位置设置为绝对位置并进行调整left right top and bottom Using vendor t
  • 当主线程繁忙时如何让Qt工作?

    我的程序的主线程 函数 main 在那里 是为非 GUI 任务保留的 它调用了许多冗长的计算函数 所有实现的 GUI 都在单独的线程中完成其工作 我现在将使用 Qt 实现另一个 GUI Qt 文档说所有与 GUI 相关的任务都应该在主线程中
  • 如何在本地下载pip依赖项? [复制]

    这个问题在这里已经有答案了 我正在运行我的 python 应用程序requirements txt包含各种依赖项的文件 我正在 Pivotal Cloud Foundry 环境中部署此应用程序 然而 我在其中部署的环境是气隙的 因此我似乎无
  • Django URLS,使用 ?在网址中

    我正在尝试进行一些 Django URL 匹配 我想要一些我有的网址http mysite com base sort type1 http mysite com base sort type2 etc 我不知道如何 URL 匹配这些表达式
  • 配置来自 Nifi 的 HTTP POST 请求

    我正在尝试从 REST 客户端访问 WCF 服务 我正在从 REST 客户端向 WCF 服务发送 POST 请求 详细如下 供大家参考 The 服务合同定义如下 ServiceContract public interface IBZTso
  • UWP 中的自定义内容对话框包含 3 个以上按钮

    我想显示一个内容对话框 其中包含比传统的主要和次要结果更多的内容 由于我无法重写 ContentDialogResult 枚举并向该属性添加选项 因此我似乎唯一的选择可能是创建自己的自定义控件 其工作方式与 ContentDialog 类似
  • AppDelegate for Cocoa 应用程序在 Xcode 6 中使用 Storyboards

    我有一个现有的 OS X 应用程序 在转换为 Storyboards 作为主界面后 我的应用程序委托不再被使用 之前 MainMenu xib 有一个 App Delegate 对象 我可以将其类设置为我的应用程序委托 然而 故事板不包含这