AppKit(二):NSApplicationDelegate协议

470 阅读28分钟

NSApplicationDelegate协议

一个管理APP生命周期及其与公共系统服务交互的方法集合。
可这说是集合,简直就是一个方法海!咱们往下看......

声明

protocol NSApplicationDelegate : NSObjectProtocol

主题

加载application相关的方法

func applicationWillFinishLaunching(Notification)
通知代理application将要初始化完成

声明
@MainActor optional func applicationWillFinishLaunching(_ notification: Notification)
参数

notification
名为willFinishLaunchingNotification的通知。通知中的object代表NSApplication

系统要求

macOS 10.10+


再说一下willFinishLaunchingNotification通知, finishLaunching()方法开始前发送该通知,来表明APP完成初始化,并即将完成加载。
class let willFinishLaunchingNotification: NSNotification.Name 通知的对象是NSApp.该通知不包含在userInfo字典中。

引用于

Supporting Continuity Camera in Your Mac App


func applicationDidFinishLaunching(Notification)
通知代理APP初始化完成,但是还没有收到第一个事件。

参数

notification
名为didFinishLaunchingNotification的通知。通知中的object代表NSApplication

详情

通知对象是单例。参阅NSApplicationDidFinishLaunching User Keys,了解userInfo的键与值。不用参阅,其实就在下边。

系统要求

macOS 10.10+


NSApplicationDidFinishLaunching User Keys
在APP初始化阶段,系统传递给APP的,用来访问加载选项字典中值的键。

键名

class let launchIsDefaultUserInfoKey: String
该键的值是包含布尔值的NSNumber.如果APP启动来打开或者打印文件、执行Service操作、如果APP有将会恢复的保存状态、或者APP不是在默认情况下启动的,该值是false。其他情况下,值为true。

声明
class let launchIsDefaultUserInfoKey: String
系统要求

macOS 10.7+


class let launchUserNotificationUserInfoKey: String
表明用户从通知中心激活通知启动APP的键。

声明
class let launchUserNotificationUserInfoKey: String
详情

如果APP是因为用户激活通知中心的通知而启动,launchUserNotificationUserInfoKey键是一个存在于didFinishLaunchingNotification通知的userInfo字典中的NSUserNotification对象.访问userInfo中的此对象,你可以用如下方式:

NSUserNotification *userNotification = [[myNotification userInfo]
    objectForKey:NSApplicationLaunchUserNotificationKey];
    if (userNotification) {
        // The app was launched by a user selection from Notification Center.
    }
系统要求

macOS 10.8+

管理活跃状态相关的方法

func applicationWillBecomeActive(Notification)
通知代理,APP差不多要进入活跃状态了。

声明
@MainActor optional func applicationWillBecomeActive(_ notification: Notification)
参数

notification 名为willBecomeActiveNotification的通知。通知中的object代表NSApplication

系统要求

macOS 10.10+


func applicationDidBecomeActive(Notification)
通知代理,APP已经进入活跃状态。

声明
@MainActor optional func applicationDidBecomeActive(_ notification: Notification)
参数

notification
名为didBecomeActiveNotification的通知。通知中的object代表NSApplication

系统要求

macOS 10.10+


func applicationWillResignActive(Notification)
通知代理,APP将要成为不活跃状态,并且要失去焦点了。

声明
@MainActor optional func applicationWillResignActive(_ notification: Notification)
参数

名为willResignActiveNotification的通知,通知中的object代表NSApplication

系统要求

macOS 10.10+


func applicationDidResignActive(Notification)
通知代理,APP不再活跃,也没有了焦点。

声明
@MainActor optional func applicationDidResignActive(_ notification: Notification)
参数

notification 名为didResignActiveNotification的通知,通知中的object代表NSApplication

系统要求

macOS 10.10+

终止程序相关的方法

func applicationShouldTerminate(NSApplication) -> NSApplication.TerminateReply
返回一个表示是否应该终止APP的值。

声明
@MainActor optional func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply
参数

sender
即将被终止的那个application对象

返回值

一个表明application是否应该被终止的NSApplication.TerminateReply枚举常量。出于兼容性的考虑,false等于NSApplication.TerminateReply.terminateCanceltrue等于NSApplication.TerminateReply.terminationNow.

详情

程序的退出Quit菜单选项点击之后,或者调用terminate(_:)之后,会调用这个方法。一般情况下,应该返回NSApplication.TerminateReply.terminateNow,来完成终止操作,但是你也可以取消终止操作,或者根据需要推迟终止操作。例如,你可能需要在程序终止之前完成关键数据的处理,但是当你完成所需操作之后,需要立即调用reply(toApplicationShouldTerminate:)方法。

系统要求

macOS

enum TerminateReply
决定是否应该终止APP的枚举常量。
\qquadcase terminateNow
\qquad完成终止操作。
\qquadcase terminateCancel
\qquad取消终止操作。
\qquadcase terminateLater
\qquad延迟终止操作。返回这个值会导致Cocoa将run loop运行NSModalPanelRunLoopMode中,直到APP调用reply(toApplicationShouldTerminate:),参数为truefalse。此返回值用于需要显示modal alert(sheet)来决定是否退出的代理。

初始化器

init?(rawValue: UInt)


func applicationShouldTerminateAfterLastWindowClosed(NSApplication) -> Bool
返回一个布尔值,该值表明是否最后一个窗口一旦关闭,程序就会终止。

声明
@MainActor optional func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool
参数

sender
最后一个窗口被关闭的application对象。

返回值

如果最后一个窗口关闭时不终止程序,返回false;否则返回true

详情

程序最后一个窗口关闭时,程序会发送这个消息给你的代理,不管是否有panel仍然处于打开状态,都会发送这个消息(这里的panel定义为一个NSPanel对象,或者是其子类)。
如果返回false,控制会回到主循环并且程序不会终止。如果返回true,随后会调用代理的applicationShouldTerminate(_:)方法来确认应该终止程序。

系统要求

macOS


func applicationWillTerminate(Notification)
通知代理,APP即将终止。

声明
@MainActor optional func applicationWillTerminate(_ notification: Notification)
参数

notification
名为willTerminateNotification的通知,通知中的object代表NSApplication

详情

你的代理可以使用该方法来确认程序终止前的最终清理工作。该方法返回后,程序将被终止。

备注:
程序突然退出,不会调用这个方法。了解更多关于程序突然退出的信息,参见ProcessInfo

系统要求

macOS 10.10+

程序隐藏相关的方法

func applicationWillHide(Notification)
通知代理,程序即将被隐藏。

声明
@MainActor optional func applicationWillHide(_ notification: Notification)
参数

notification
名为willHideNotification的通知。通知中的object代表NSApplication

系统要求

macOS 10.10+


func applicationDidHide(Notification)
通知代理,程序已经被隐藏了。

声明
@MainActor optional func applicationDidHide(_ notification: Notification)
参数

notification
名为didHideNotification的通知,通知中的object代表NSApplication

系统要求

macOS 10.10+


func applicationWillUnhide(Notification)
通知代理,程序将要显示。

声明
@MainActor optional func applicationWillUnhide(_ notification: Notification)
参数

notification
名为willUnhideNotification的通知。通知中的object代表NSApplication

系统要求

macOS 10.10+


func applicationDidUnhide(Notification)
通知代理,APP现在已经可见了。

声明
@MainActor optional func applicationDidUnhide(_ notification: Notification)
参数

notification
名为didUnhideNotification的通知。通知中的object代表NSApplication

系统要求

macOS 10.10+

管理窗口相关的方法

func applicationWillUpdate(Notification)
通知代理,程序的窗口即将update

声明
@MainActor optional func applicationWillUpdate(_ notification: Notification)
参数

notification
名为willUpdateNotification的通知,通知中的object代表NSApplication

系统要求

macOS 10.10+


func applicationDidUpdate(Notification)
通知代理,程序的窗口已经update

声明
@MainActor optional func applicationDidUpdate(_ notification: Notification)
参数

notification
名为didUpdateNotification的通知,通知的object代表NSApplication

系统要求

macOS 10.10+


func applicationShouldHandleReopen(NSApplication, hasVisibleWindows: Bool) -> Bool
返回一个标示APP是否响应reopen AppleEvents的布尔值。

声明
@MainActor optional func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows: Bool) -> Bool  
参数

sender
application对象

hasVisibleWindows
重新打开APP时,是否有可用的window,APP初次启动也有效。 如果返回值设置为true,可以用这个值作为判定条件做一些事情。(实际尝试,这里不管返回false或者true,APP从dock重新打开,都会调用这个方法,但是用hasVisibleWindows作为判断条件做一些事情倒是真的。)

返回值

如果想让程序执行内部正常的任务,返回true;如果不想让程序做任何事情,返回false

详情

不管何时,只要访达重新激活已经运行的程序时,都会执行这个方法,不管是双击打开还是从dock打开。
默认情况下,AppKit将会通过检查是否有可见的NSWindow(不是NSPanel),来处理此事件。如果不存在可见的 NSWindow 对象,它将执行标准的无标题文档创建流程(与应用程序在没有要打开的文档的情况下启动时的操作相同)。对于大多数基于文档的应用程序,将创建一个无标题文档。
程序代理将会得到一个处理正常无标题文档代理方法的机会。如果你在你的程序代理中实现了该方法,它将会在任何默认行为发生前调用。如果返回trueNSApplication将正常处理事务。如果返回falseNSApplication将不会做任何事情。因此你可以选择以下两种不执行任何操作方法中的一种:如果你确实不想做任何事情,返回false(不建议);或者你可以实现该方法,用自定义方式处理一些自定义事件,然后返回false
尽管在窗口最小化时,调用isVisible会返回false,但是在此方法中,窗口最小化和窗口保留在Dock中视为窗口可见,hasVisibleWindows会返回true

系统要求

macOS


管理Dock菜单相关的方法

func applicationDockMenu(NSApplication) -> NSMenu?
返回APP的dock菜单。

声明
@MainActor optional func applicationDockMenu(_ sender: NSApplication) -> NSMenu?
参数

sender
绑定代理的application对象。

返回值

显示在Dock中的菜单。

详情

你同样可以使用Interface Builder连接一个dockMenuoutlet。第三种方法是用nib创建NSMenu
如果用这个方法返回了菜单,它的优先级要高于nib方式生成的。
每个测试项的targetaction会传递个dock。选中dock中的选项,将会调用[NSApp sendAction:selector to:target from:nil]向你的程序发送消息。
想指定一个nib中的NSMenu,你需要在info.plist中添加AppleDockMenu键,并以nib的名作为值。nib名不需要带扩展名。然后创建file's owner(通常默认是NSApplication)和menu的连接,这样一连以后,menu就成了懒加载的方式加载了,而不是上来就初始化。

作者备注:
不知道这个文档对应的xcode是什么版本,在Xcode16.3中,没有找到这个AppleDockMenu键。创建NSMenu也没有默认创建nib的选项。但是在MainStoryboard创建NSMenu后,与AppDelegate建立连接,也可是实现nib的效果。而且这个代理方法,在xcode调试模式下,右击dock图标,不会生成新建的菜单,调用也不是实时的,需要运行打包好的APP,才会看到新建的菜单。

系统要求

macOS


快捷键本地化相关的方法

func applicationShouldAutomaticallyLocalizeKeyEquivalents(NSApplication) -> Bool
返回一个布尔值,告诉系统是否重新映射快捷键以支持本地化键盘。

声明
@MainActor optional func applicationShouldAutomaticallyLocalizeKeyEquivalents(_ application: NSApplication) -> Bool  
参数

application
与代理绑定的APP对象。

返回值

返回true,自动让APP所有特定的菜单快捷键启动本地化;返回false,自己处理快捷键本地化。

详情

给一种语言定义的快捷键,较难或者根本不可能复制到拥有不同字符集或布局的键盘上。本地化的键盘有时会重新排列标点符号,或者为了给自己语言的特定字符腾出空间,直接替换它们。新的键位可能使你目前的快键键无法使用。为了确保你的快捷键始终可用,系统在需要的时候会自动重映射,来适配连接的键盘。
如果返回true,或者没有实现这个代理方法,系统会自动重映射那些在当前键盘中没有的,APP中特定的菜单快捷键。如果快捷键在两种键盘的位置是相同的,或者快捷键在新键盘中也能获取到,系统不会重映射这些快捷键。重映射是自动完成的,对你的APP来说,过程是透明的。
如果你已经对不同的语言实现了快捷键的本地化,或者你允许用户自行设定快捷键,可以返回false,引用自动映射功能。当返回false,系统不会改变APP的快捷键,相反,你应该负责支持本地化键盘的所有工作。
在启动程序时的最后激活阶段,APP对象的finishLaunching()方法会调用此代理方法一次,来记录APP的响应。

系统要求

macOS 12.0+

显示错误相关的方法

func application(NSApplication, willPresentError: any Error) -> any Error
给APP返回一个错误,方便展示个用户。

声明
@MainActor optional func application(_ application: NSApplication, willPresentError error: any Error) -> any Error
参数

application
绑定代理的APP对象。
error
用于构造错误信息的错误对象。在这个代理方法的实现中可以返回一个新的NSError对象,或者直接返回这个参数。

返回值

需要显示的错误对象。

详情

只要程序中没有重写NSResponderpresentError:modalForWindow:delegate:didPresentSelector:contextInfo:presentError:方法,你可以实现这个代理方法,自定义程序引发的错误的展示方式,来防止错误通过响应者链条传递到APP对象。
你可以在代理方法的视线中检查错误,如果错误的描述或恢复信息是无用的,你可以返回一个包含适用于alert弹框或者对话框文本的错误对象。如果你这么做了,一定要使用NSError对象的域和错误代码来区分你想要自定义展示方式的错误和不想自定义的错误。不要基于本地化描述、恢复建议或恢复选项来做决策,因为解析本地化文本会有问题。如果你决定不自定义错误展示信息,只需返回传入的错误对象即可。

系统要求

macOS

屏幕管理相关的方法

func applicationDidChangeScreenParameters(Notification)
通知代理,更改了连接显示器的配置。

声明
@MainActor optional func applicationDidChangeScreenParameters(_ notification: Notification)
参数

notification
名为didChangeScreenParametersNotification。通知的object代表NSApplication

系统要求

macOS 10.10+

继续用户活动相关的方法

func application(NSApplication, willContinueUserActivityWithType: String) -> Bool
返回一个指示APP是否可以持续指定活动的布尔值。
####声明

@MainActor optional func application(_ application: NSApplication, willContinueUserActivityWithType userActivityType: String) -> Bool
参数

application
持续用户活动的APP对象。
userActivityType
持续活动的类型。

返回值

如果你通知用户你的应用程序即将继续该活动,则为true;如果你想让AppKit通知用户,则为false。

详情

用这个方法,给客户一个反馈,提示用户有活动将会在设备上继续运行。如果用户允许活动可以继续运行,APP就会调用这个方法。但有可能是在活动绑定的数据可用之前。
一旦用户表示某个活动可以继续在你的APP中执行,这个代理方法会在主线程中调用。NSUserActivity对象可能不会立即成为可用状态,在此期间,可以给用户一些提示,告知用户某个活动即将继续,并返回true。如果返回false或者不是实现这个方法,AppKit将会显示默认的提示。
每次调用该代理方法,每次成功时,都会调用application(_:continue:restorationHandler:)代理方法,每次出错时,都会调用application(_:didFailToContinueUserActivityWithType:error:)代理方法。

系统要求

macOS 10.10+


func application(NSApplication, continue: NSUserActivity, restorationHandler: ([any NSUserActivityRestoring]) -> Void) -> Bool
返回一个布尔值,指示是否APP重新创建了指定的活动。

声明
@MainActor optional func application(_ application: NSApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([any NSUserActivityRestoring]) -> Void) -> Bool
参数

application
继续用户活动的APP对象。
userActivity
包含用户正在执行的任务数据的活动对象。用这个对象中的数据,重启用户正在做的任务。
restorationHandler
你的APP创建或获取对象来执行用户任务时调用的闭包。闭包的调用是可选的,只有指定的对象有能力继续这个活动时,才会调用。你可以copy闭包,延时调用。当调用copy的闭包时,必须在APP的主线程中。这个闭包没有返回值,需要的参数如下:

restorableObjects
一个包含NSResponderNSDocument对象的数组,里边的这些对象,都是为了执行操作创建或获取的。系统会调用这些对象中的restoreUserActivityState(_:)方法来执行操作。

返回值

如果这个方法处理继续的活动,返回true;如果想让AppKit尝试继续活动,返回false

详情

当APP收到与用户活动相关联的数据是,会调用这个方法。用储存在NSUserActivity中的数据来重新创建用户活动。这个方法是你更新APP的机会,这样它就可以执行绑定的任务。
如果这个方法返回false,或者没有实现,并且用户活动是用CFBundleDocumentTypes中的NSUbiquitousDocumentUserActivityType 自动创建的,AppKit可以在macOS中自动恢复NSUserActivity.通过使用 userInfo字典中NSUserActivityDocumentURLKey下存储的 URL 创建相应类型的文档来实现这一点。系统会在文档上调用 NSDocument 方法 restoreUserActivityState(_:)

系统要求

macOS 10.10+


func application(NSApplication, didFailToContinueUserActivityWithType: String, error: any Error)
通知代理,APP不会继续指定的活动。

声明
@MainActor optional func application(_ application: NSApplication, didFailToContinueUserActivityWithType userActivityType: String, error: any Error)
参数

application
继续用户活动的APP对象。
userActivityType
需要继续的活动的类型

返回值

application
尝试继续活动的APP对象。
userActivityType
尝试过的活动类型
error
表明错误原因的错误对象。

详情

使用此方法告知用户无法继续执行某个指定的活动。如果没有实现这个方法,AppKit会显示适当的错误信息给用户。

系统要求

macOS 10.10+


func application(NSApplication, didUpdate: NSUserActivity)
通知代理,已经变为指定的活动。

声明
@MainActor optional func application(_ application: NSApplication, didUpdate userActivity: NSUserActivity)
参数

application
APP单例对象。
userActivity
更新的用户活动对象。

详情

任何一个被AppKit管理着的用户活动更新的时候,会调用这个方法。这是加载额外数据到用户活动对象的最后机会。
####系统要求
macOS 10.10+

处理推送通知相关的方法

func application(NSApplication, didRegisterForRemoteNotificationsWithDeviceToken: Data)
通知代理,APP注册了苹果推送服务(Apple Push Services)。

声明
@MainActor optional func application(_ application: NSApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
参数

application
启动远程通知注册过程的APP对象。
deviceToken
标记设备到Apple Push Notification Service(APNS)苹果推送通知服务的tokentoken是一种不透明的数据类型,因为这是提供者在向设备发送通知时需要提交给 APNS 服务器的格式。出于性能考虑,APNS服务器要求数据要用二进制格式。
设备token的大小为32个字节。

详情

NSApplication对象的registerForRemoteNotifications(matching:)方法被调用时,这个代理方法会被调用,并且注册过程不会发生错误。当收到设备token后,程序应该连接它的提供者,并且传递token给提供者。APNS只会向应用程序运行的计算机发送有此token的通知。
关于实现发送通知的更多信息,参阅User Notifications

系统要求

macOS 10.7+


func application(NSApplication, didFailToRegisterForRemoteNotificationsWithError: any Error)
通知代理,APP无法注册Apple Push Services。

声明
@MainActor optional func application(_ application: NSApplication, didFailToRegisterForRemoteNotificationsWithError error: any Error)
参数

application
启动远程通知注册流程的application对象。
error
封装注册失败原因信息的NSError对象,程序可以将其显示个用户。

详情

NSApplication调用registerForRemoteNotifications(matching:)方法并在注册过程中有错误发生时,会调用这个代理方法。
关于实现发送通知的更多信息,参阅User Notifications

系统要求

macOS 10.7+


func application(NSApplication, didReceiveRemoteNotification: [String : Any])
通知代理,收到了远程通知。

声明
@MainActor optional func application(_ application: NSApplication, didReceiveRemoteNotification userInfo: [String : Any])
参数

application
收到远程通知的application对象。
userInfo
包含关联远程通知的信息的字典,包括icon显示的bage number、通知ID、其他的自定义数据。提供者提供JSON格式的字典AppKit会转成NSDictionary,字典可能仅包含Plist加NSNull

详情

当程序正在运行并且收到了一个远程通知,会调用这个代理方法。作为响应,应用程序通常会与其提供者建立连接,并下载等待处理的数据。它还可能以任何其认为有用的方式处理通知。
userInfo字典中包含另一个可以通过aps键获取的字典。您可以使用以下键访问aps字典的内容:

  • badge - 从提供者获取的数据条目的数量。显示到程序图标上的数字。如果没有badge属性,表示需要移除目前程序图标上显示的数字。 -- 这是唯一一个支持程序可以不用运行的通知类型。
  • alert - 可能是包含需要展示信息的字符串,也可能是一个包含bodyshow-view两个键的字典。第一个键表示需要展示信息的字符串,第二个键是一个布尔值。你可以忽略第二个键。
  • sound - 在程序bundle中的声音文件名,会将此作为提示音。如果指定default,则会播放默认声音。
    userInfo可能根据JSON包含提供者的自定义数据。自定义数据应该与aps字典同级。但是,自定义属性不应该传递大数据,因为每个通知有大小限制(256字节),如果数据太大,传递不能保证成功。
    如果你实现了applicationDidFinishLaunching(_:)方法,并且收到了推送给程序的通知,那么这个代理方法就不会调用了。在这种情况下,你可以通过NSNotification对象中的userInfo字典来获取JSON数据。
    关于实现发送通知的更多信息,参阅User Notifications
系统要求

macOS 10.7+

处理CloudKit邀请相关的方法

这个邀请(Invitations)啥意思不知道,先这么翻译着。
func application(NSApplication, userDidAcceptCloudKitShareWith: CKShareMetadata)
当用户接受CloudKit共享邀请时,通知代理。

声明
@MainActor optional func application(_ application: NSApplication, userDidAcceptCloudKitShareWith metadata: CKShareMetadata)
参数

application
APP的单例对象。
metadata
关联邀请的元数据。使用元数据的CKShare对象的URL以及containerIdentifier属性来调度一个CKAcceptSharesOperation对象。

详情

使用提供的元数据开始与当前用户共享指定的内容。更多信息,参阅:CloudKit

系统要求

macOS 10.12+

处理 SiriKit意图相关的方法

func application(NSApplication, handlerFor: INIntent) -> Any?
返回一个能够处理指定意图的意图句柄。

声明
@MainActor optional func application(_ application: NSApplication, handlerFor intent: INIntent) -> Any?
参数

application
APP单例对象。
intent
来自系统请求的意图对象。

返回值

能够处理指定意图的类型的实例对象。如果程序没有处理意图,则返回nil。或者返回与提供的intent相同类型的实例,该实例遵守处理意图的协议。

详情

当Siri想处理你的程序支持的意图时,会在主队列调用该方法。通过在你APP targetInfo.plist文件中添加INIntentsSupported数组(作者实测,没找到这个键名,粗略查了查资料,好像要用Extension方式实现,以后再研究。),来指明你的程序支持的意图。
在这个代理方法的实现中,检查intent参数的类型,并返回遵守相应处理协议的自定义对象。例如,如果intent是一个INPlayMediaIntent实例,返回一个遵守INPlayMediaIntentHandling协议的自定义对象。只使用提供的意图来决定返回哪个处理句柄;不要用它来初始化处理句柄,也不要存储对它的引用。在请求过程中,SiriKit会更新意图来合并用户提供的信息。想获取更多信息,参阅Dispatching intents to handlers
获取更多意图处理方式,参阅SiriKit

系统要求

macOS 12.0+

打开文件相关的方法

func application(NSApplication, open: [URL])
通知代理,打开指定路径下的文件。

声明
@MainActor optional func application(_ application: NSApplication, open urls: [URL])
参数

application
APP单例对象。
urls
需要打开的路径的数组。其中不包含你的APP已经定义的文档类型的URL。

详情

当你的程序被要求打开一个或多个基于URL的资源是会调用这个方法。首先得明确你的程序支持的URL类型,通过在Info.plist中添加键CFBundleURLTypes来明确这一点。Info.plist中还可以包含还没有和NSDocument类关联的文档类型的URL。你可以通过Xcode,或者在Info.plist文件中添加CFBundleDocumentTypes键来配置文档类型。
如果代理实现了该方法,AppKit将不会调用application(_:openFile:)或者application(_:openFiles:)方法。
####系统要求
macOS 10.13+


func application(NSApplication, openFile: String) -> Bool
返回程序是否成功打开了指定文件的布尔值。

声明
@MainActor optional func application(_ sender: NSApplication, openFile filename: String) -> Bool
参数

sender
与代理绑定的application对象。 filename
要打开的文件名。

返回值

文件成功打开,返回true,否则返回false

详情

此方法由application直接发送给代理,打开filename指定的文件,如果打开成功,返回true,否则返回false。如果用户是通过双击文件打开的程序,代理将会在收到applicationDidFinishLaunching(_:)消息之前,收到application(_:openFile:)消息。(但是applicationWillFinishLaunching(_:)是在application(_:openFile:)之前发送的)。

系统要求

macOS


func application(Any, openFileWithoutUI: String) -> Bool
返回程序是否成功打开了指定文件而且没有显示用户界面的布尔值。

声明
@MainActor optional func application(_ sender: Any, openFileWithoutUI filename: String) -> Bool
参数

sender
发送该方法的对象。
filename
要打开的文件的文件名。

返回值

文件成功打开,返回true,文件打开失败,返回false

详情

此方法由sender直接发送给代理,要求像打开链接文件那样打开filename文件。这个方法应该是在没有建立用户界面的情况下打开文件的 --- 也就是说,是在sender编程控制下打开的,而不是用户的键盘控制下打开的。

系统要求

macOS


func application(NSApplication, openTempFile: String) -> Bool
返回一个程序是否成功打开了一个临时文件的布尔值。

声明
@MainActor optional func application(_ sender: NSApplication, openTempFile filename: String) -> Bool
参数

sender
绑定代理的application对象
filename
要打开的临时文件的文件名。

返回值

如果文件成功打开,返回true,否则,返回false

详情

此方法由application直接发送给代理。此方法应该尝试打开filename对应的文件,如果打开成功,返回true,否则返回false
按照设计,用此方法打开的文件,假定是临时的 --- 程序有责任在适当的时机删除该文件。

系统要求

macOS


func application(NSApplication, openFiles: [String])

声明
@MainActor optional func application(_ sender: NSApplication, openFiles filenames: [String])
参数

sender
绑定代理的application对象
filenames
要打开的文件名的字符串数组。

详情

除了打开的文件名是依据filenames数组来的,其他的与application(_:openFile:)方法一样。不管是失败还是成功,或者用户取消,代理都应该实现reply(toOpenOrPrint:)方法。

系统要求

macOS


func applicationShouldOpenUntitledFile(NSApplication) -> Bool
返回表明程序是否可以打开无标题文件的布尔值。

声明
@MainActor optional func applicationShouldOpenUntitledFile(_ sender: NSApplication) -> Bool
参数

sender
绑定代理的application对象

返回值

如果程序应该打开一个新的无标题文件,返回true。如果不应该打开,返回false

详情

用该方法决定程序是否应该打开一个新的、无标题的文件。注意,如果返回trueapplicationOpenUntitledFile(_:)会被调用。

系统要求

macOS


func applicationOpenUntitledFile(NSApplication) -> Bool
返回指示是否成功无标题文件的布尔值。

声明
@MainActor optional func applicationOpenUntitledFile(_ sender: NSApplication) -> Bool
参数

sender
绑定代理的application对象

返回值

如果文件成功打开,返回true,否则返回false

详情

NSApplication直接发送给代理,来请求一个新的、无标题的文件是否被成功打开。

系统要求

macOS

打印相关的方法

func application(NSApplication, printFile: String) -> Bool
返回一个指示APP是否完整打印指定文件的布尔值。

声明
@MainActor optional func application(_ sender: NSApplication, printFile filename: String) -> Bool
参数

sender
处理打印的application对象。
filename
需要打印的文件的文件名。

返回值

如果文件被成功打印,返回true,否则,返回fasle

详情

该消息由theApplication直接发送给代理。此方法返回后,程序将会终结(使用terminate(_:))。
如果有可能,这个方法应该在没有用户界面的情况下打印文件。例如,如果你传递一个NSPrint选项给TextEdit文本编辑程序,TextEdit假定你想打印整个指定的文件。然而,如果程序打开了复杂的文档,你可能就需要展示一个panel给用户,让他们选择实际他们想打印的文件。

系统要求

macOS


func application(NSApplication, printFiles: [String], withSettings: [NSPrintInfo.AttributeKey : Any], showPrintPanels: Bool) -> NSApplication.PrintReply
返回APP是否打印指定文件的值。

声明
@MainActor optional func application(_ application: NSApplication, printFiles fileNames: [String], withSettings printSettings: [NSPrintInfo.AttributeKey : Any], showPrintPanels: Bool) -> NSApplication.PrintReply
参数

application
处理打印的application对象。
fileNames
包含每一个需要打印的文件的文件名的字符串数组。
printSettings
包含NSPrintInfo(兼容的打印作业属性)的字典。
showPrintPanels
指示打印每个文件的时候是否显示打印属性窗口。即使该值为fasle,也会显示打印进度指示器。

返回值

指示打印是否成功的常量。可能的值为NSApplication.PrintReply枚举。

详情

如果打印结果不能立即返回,就返回NSPrintingReplyLater,例如:打印操作会弹出表单。如果此方法返回NSPrintingReplyLater,则不管打印操作是完成、成功或者失败,都要调用NSApplicationreply(toOpenOrPrint:)方法。
这个代理方法代替已经废弃的application:printFiles:方法。如果你的程序代理仍然实现着废弃的方法,然然可以调用,NSApplication使用私有功能让打印设置生效。

系统要求

macOS

enum PrintReply
指示打印请求结果的枚举常量。
\qquadcase printingCancelled
\qquad打印取消了。
\qquadcase printingSuccess
\qquad打印成功了。
\qquadcase printingFailure
\qquad打印失败了。
\qquadcase printingReplyLater
\qquad打印结果无法立马返回,比如,打印将会弹出表单。。如果此方法返回NSPrintingReplyLater,则不管打印操作是完成、成功或者失败,都要调用NSApplicationreply(toOpenOrPrint:)方法。

恢复程序状态相关的

func applicationSupportsSecureRestorableState(NSApplication) -> Bool
返回指示APP是否支持安全状态恢复的布尔值。

声明
@MainActor optional func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool
参数

app
绑定代理的APP对象。

返回值

APP支持安全状态恢复,就返回true, 否则,返回false

系统要求

macOS 12.0+


func applicationProtectedDataDidBecomeAvailable(Notification)
通知代理,受保护的数据现在可用。

声明
@MainActor optional func applicationProtectedDataDidBecomeAvailable(_ notification: Notification)
系统要求

macOS 12.0+


func applicationProtectedDataWillBecomeUnavailable(Notification)
通知代理,受保护的数据即将可用。

声明
@MainActor optional func applicationProtectedDataWillBecomeUnavailable(_ notification: Notification)
系统要求

macOS 12.0+


func application(NSApplication, willEncodeRestorableState: NSCoder)
通知代理,程序即将对其可恢复状态进行编码。

声明
@MainActor optional func application(_ app: NSApplication, willEncodeRestorableState coder: NSCoder)
参数

app
application对象。
coder
提取存档的编码器。

系统要求

macOS 10.7+


func application(NSApplication, didDecodeRestorableState: NSCoder)

声明
@MainActor optional func application(_ app: NSApplication, didDecodeRestorableState coder: NSCoder)
参数

app
application对象。
coder
读取存档的编码器。

系统要求

macOS 10.7+

处理遮挡状态改变相关的方法

func applicationDidChangeOcclusionState(Notification)
通知代理,将要改变程序的遮挡状态了。

声明
@MainActor optional func applicationDidChangeOcclusionState(_ notification: Notification)
参数

notification
名为didChangeOcclusionStateNotification通知,通知的objectNSApplication本身。

详情

收到此方法后,你可以查询程序的遮挡状态。注意:只有遮挡状态改变时才会接受通知,而不是遮挡区域改变时。你可以用此方法,停止那些用户看不到,而且代价昂贵的计算,来提高响应能力、节约电源。

系统要求

macOS 10.9+

编写程序脚本相关的方法

func application(NSApplication, delegateHandlesKey: String) -> Bool
返回一个指示程序是否支持特定指定脚本键的布尔值

声明
@MainActor optional func application(_ sender: NSApplication, delegateHandlesKey key: String) -> Bool
参数

sender
绑定代理的APP对象。
key
要处理的key。

返回值

如果你的代理处理了键,返回true。否则,返回false

详情

实现此方法,若您的委托处理指定的键,则返回 true,您的委托必须能够获取或设置与该键对应的可脚本化属性或元素。你只需要处理应用程序的自定义命令即可。应用已经为其处理的每个键实现了相应的方法,方法名与键相匹配。
例如,不使用Cocoa基于文档应用设计的可脚本化APP,可以实现此代理方法来提供自己的文档排序。之所以这样做有可能是因为标准的APP代理希望与基于文档的APP协同工作。TextEdit(其源代码是与macOS开发工具一同发布的) 程序提供了如下实现:

return [key isEqualToString:@"orderedDocuments"];

TextEdit将会在它自己的控制器类中实现orderedDocuments方法并返回一个排列好的文档列表。拥有自己窗口排序的APP,可能会为orderedWindows键添加一个测试方法,来让自己的代理能够提供自己版本的orderedWindows方法。

重要: 除了get或set之外,Cocoa脚本不会为脚本命令调用此方法。更多使用其他命令的信息,参阅:Script Commands

系统要求

macOS

类方法相关的方法

static func main()
提供APP的顶层入口。

声明
static func main()
系统要求

macOS()
###关系网

继承自

NSObjectProtocol