问题标签 [nsapplication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2462 浏览

objective-c - 设置 Cocoa 应用程序退出状态的任何好方法?

我有一个与服务器交互并显示 GUI 的 Cocoa 应用程序。如果出现致命错误,我会显示警报并退出。我想将退出状态设置为非零值以反映发生了错误,以便与其他一些基于 UNIX 的工具进行交互。

不幸的是,我一直无法找到这样做的好方法 - NSApplication 似乎没有任何方法来设置退出状态。目前,我已经将 NSApplication 子类化并添加了一个exitStatusivar(我在必要时在我的应用程序委托中设置),然后被覆盖-terminate:,以便它调用exit(exitStatus). 这很好用,但对我来说似乎有点邋遢,更不用说我可能错过了标准terminate:在幕后所做的一些重要事情。我不能调用[super terminate:sender]我的子类方法,因为那exit()没有给我设置状态的机会。

我错过了一些明显的东西吗?

0 投票
4 回答
6362 浏览

cocoa - NSApplication orderFrontStandardAboutPanel:让我的关于面板稍微不那么标准

当 NSApplication 在收到 orderFrontStandardAboutPanel 消息时显示的标准 Cocoa about 对话框中添加额外的任意数据时,我有哪些选择(如果有的话)。

0 投票
1 回答
3316 浏览

objective-c - 如何在 applicationWillFinishLaunching 委托中终止可可应用程序

在用户开始使用我的应用程序之前,我必须向用户显示自定义许可协议对话框。因此,我在 mainMenu.xib 中添加了新窗口,并使用模态显示该窗口

在 applicationWillFinishLaunching: 中,通过使我的主窗口隐藏使用在 Launch 时可见到未选中来委托。许可证窗口有两个按钮同意和不同意。如果用户点击同意按钮,我需要显示主窗口,如果他们选择不同意,我需要终止应用程序。

我尝试调用 [NSApp terminate];在 applicationWillFinishLaunching: 但它什么也没做。

请让我知道如何在 applicationWillFinishLaunching 中终止应用程序:

谢谢

0 投票
1 回答
5081 浏览

cocoa - 如何实现自定义 NSApplication 终止:Cocoa 中的行为?

我正在尝试在 Cocoa 应用程序中实现自定义终止行为。通常,当我的应用程序正常退出时,它会执行最终运行时数据库清理,然后退出。NSApplication每当[NSApp terminate:aSender]被调用时,这都会在 AppDelegate(的委托)内部发生:

如果在运行时发生错误(例如数据库文件被删除),我会向用户显示错误,并让他们选择恢复(放回文件并重试)或退出。如果选择退出,我想退出应用程序跳过数据库清理,因为它不再可能。本质上,我想要这样的东西:

当然,问题在于获取gracefulTermination的值。

有没有办法将自定义变量传递给NSApp何时terminate:被调用,例如 infoDict,然后在内部接收它applicationShouldTerminate:

如果没有,是否有更好的方法来完成自定义终止行为?


据我所知,当terminate:被其他对象调用时,会发生这种情况:

  1. [NSApp terminate:self];foo(又名self)调用。
  2. NSApp 发送它的委托:([aDelegate applicationShouldTerminate:self];selfNSApp,不是foo)。
  3. aDelegate 接收消息并applicationShouldTerminate:在实现时执行。

foo似乎在某处消失了,当aDelegate收到消息时,它已经永远消失了,只NSApp显示为发件人。这可以防止我将 foo 中的 infoDict 或只是一个普通的 infoDict 传递给包含自定义terminate:行为的 Delegate。


我知道不使用[NSApp terminate:...]类似exit(). 虽然从我所读到的内容来看,这是不受欢迎的,因为它不适合可可。此外,它还可以防止在内部发生任何其他清理操作applicationShouldTerminate:,即使在非正常退出期间也不应跳过这些操作。

0 投票
2 回答
4019 浏览

objective-c - NSApplication endSheet:没有效果

好的,这真的难倒我:

我在窗口上创建了一个模式表

并尝试删除它

但它仍然存在。

我已经检查了所有明显的东西,比如 IB 连接,并确保 window 和 loginWindow 存在并且处于正常状态。

所以,问题是:我错过了什么吗?

0 投票
1 回答
131 浏览

objective-c - 将文件拖到 NSStatusItem

有人告诉我application:openFile:,NSApp 的委托方法将允许我的应用程序通过将文件拖放到 Dock 中来打开文件,但这是否也适用于菜单栏中的 NSStatusItems?在尝试实施之前我想知道。

0 投票
1 回答
2416 浏览

objective-c - NSApplication 辞职最前面的应用程序状态:隐藏 v. 停用

我有一个应用程序需要在计时器到期后成为最前面的应用程序,并在按下按钮启动计时器时退出最前面的状态,例如

  • 单击“开始计时器”-> 应用程序退出最前面的应用程序
  • 计时器到期 -> 应用程序成为最前面的应用程序

我故意解释了一些事情,因为玩活跃状态sharedApplication并不能达到我想要的效果。

我通过执行 a 成为最前沿的应用程序,[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]并且效果非常好。

做相反的事情似乎是不可能的!?

  • [[NSApplication sharedApplication] deactivate]不应该直接调用,但更重要的是不会将“命令选项卡顺序”中的下一个应用程序向前移动。该应用程序只是坐在那里显示其菜单栏,但它不再“活动”。

  • [[NSApplication sharedApplication] hide: self]退出活动状态并将“ Command-tab order ”中的下一个应用程序带到前面,但它也隐藏了所有应用程序窗口。

我需要某种方法将命令选项卡顺序中的下一个应用程序放在前面,而不隐藏我所有的窗口。

有没有这样做的好方法?

该解决方案应与 10.5 Leopard 和 10.6 兼容。

我确实有一个 1996 年左右的解决方案,但它涉及 Carbon API,我真的更喜欢使用 Cocoa 或至少 Foundation 方式来实现它。

任何帮助将不胜感激。

0 投票
1 回答
2216 浏览

objective-c - NSApp 隐藏了什么:实际上对 NSWindow 实例做了什么?

我正在研究一个NSWindow子类,我遇到了一些奇怪的行为,这让我质疑我对 Windows 如何在 Mac OS X 上工作的一些假设。

NSWindow调用实例时究竟会发生什么[[NSApplication sharedApplication] hide: self]

所有不返回 NO 的窗口-(BOOL)canHide将从屏幕上消失。[NSApplication sharedApplication] unhide: self]然后,当应用程序变为活动状态或被调用时,所有窗口都会重新出现。

我曾假设这将通过拍摄当前窗口状态的快照来实现,然后调用orderOut:所有NSWindow实例,然后在调用时向后执行整个unhide:操作。

然而,情况似乎并非如此。orderOut:我的子类的方法NSWindow没有被调用..实际上它也没有被隐藏。它确实设置setCanHide:为 YES .. 发生了什么?

任何见解将不胜感激。

此致,

坦率

0 投票
1 回答
6784 浏览

objective-c - Cocoa:从另一个类调用 App Delegate 方法

我目前正在尝试从自定义视图内的拖放操作中获取文件的路径,然后将该路径传递给我的应用程序委托。我目前正在使用以下内容:

但是,我不断收到一条消息,说我的应用程序委托没有响应“uploadFiles”方法。它在我的应用程序委托中声明。我是否以正确的方式访问 NSApplication?

谢谢。

0 投票
2 回答
1545 浏览

macos - 构建 Mac OS X 应用程序而不是控制台

我有我的应用程序的一个端口,一个游戏,在 Mac OS X 上运行。我用 make 构建,并且只添加了几个 .mm 文件来访问来自 NSApplication、NSWindow 和 NSOpenGLView 的必需品。

  1. 我如何将它“转换”成一个合适的应用程序而不是当前的控制台表单?我是否将它与某些东西捆绑在一起,如果是的话,如何?或者它是某种类型的链接器设置(如在 Windows 中)?我必须使用 XCode 构建吗?
  2. 目前我只是“勾选”系统,即轮询事件而不是正确使用 OS X 消息泵。您能否指点我一些基本示例或教程,向我展示如何正确地做到这一点,同时仍然能够以固定的帧速率“勾选”我自己的东西?我说“示例或教程”,因为我在文档方面是盲目的。

谢谢!