问题标签 [nsapplication-delegate]

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 投票
1 回答
2121 浏览

objective-c - 如何正确处理 Cocoa 应用程序终止?

所以,这是我的情况:

我正在开发一个非标准的基于文档的应用程序,并且我想处理在任何文档中仍有未保存的更改时中止终止的情况。

我最初的想法是:

  • 用户尝试退出应用程序(通过"Quit XXXXX"菜单项或单击"X"按钮)
  • 有修改过的文件吗?
  • 如果否:退出
  • 如果是:通知用户有未修改的文档。如果他想继续,那就退出。否则取消终止。

因此,我决定以委托方式进行。

在我的应用程序委托中,我实现了:

  • -windowToClose:(触发NSWindowWillCloseNotification
  • applicationShouldTerminate:
  • applicationShouldTerminateAfterLastWindowClosed:

现在,这就是我的想法。在applicationShouldTerminate:方法中:

  • NSTerminateNow如果不存在修改过的文档则返回
  • NSTerminateCancel如果有修改过的文档则返回。在这种情况下,弹出一个警告表或类似的东西,如果用户确认他想退出,然后调用[NSApp terminate:nil];

这是正确的方法吗?

有什么建议么?

0 投票
4 回答
1257 浏览

objective-c - 清理App全局资源的最佳地点?

在您看到以下问题中的单词之前,请停止按retainCountOK ,请跳到底部的EDIT ,我已声明我已停止使用它。

我的 Cocoa App 使用MRR创建了许多全局资源,我在调用main()之前加载了这些资源。NSApplicationMain()由于NSApplicationMain()没有返回,我已经使用 对这些资源进行了清理atexit(),如下所示:

然而,在我的子类中的cleanup()任何视图被调用之前被调用(我没有日志消息来显示这一点),因此全局资源中对象的引用计数有时是. 我过于谨慎并试图通过使用这种方法来释放我的全局资源来预防内存泄漏:NSDocumentdealloc> 1

我的日志显示以下内容:

我的问题(终于!)是:

NSDocument有没有办法确保在所有实例都被销毁后清理我的全局资源并停止收到这些假阴性?

编辑:我已经取消了fullRelease调用,只是release对我的资源执行了正常操作,并且 Instruments 没有检测到任何内存泄漏,所以一切正常,但我很好奇为什么这些NSDocument对象在调用之前似乎没有被释放atexit()

0 投票
0 回答
558 浏览

objective-c - What happens when application:openFile returns NO instead of YES in my NSApplicationDelegate?

I'm learning some Objective-C/Cocoa and started to read up on handling open document events. Seems like the standard way is just via implementing application:openFile or application:openFiles in your NSApplicationDelegate.

So here's my little handler:

My question is: what does the boolean return value affect? This is not a document-based app, if that matters. I can see no discernible difference between returning YES or NO. Apple's docs aren't any help--obviously you return YES or NO to signal whether you successfully handled the open file event or not, but what are the actual consequences of these two outcomes?

I'm also not familiar enough with the framework to glean any knowledge from stepping through the call stack with the debugger.

To test my app I'm running it from Xcode (not handling cold start yet) then running it $ open -a MyApp somefile.txt commands in terminal as well as doing a File > Open With in Finder and choosing my app.

Related question, but about a different problem (unanswered): Very slow to open a file with application:openFile: after returning

0 投票
1 回答
2029 浏览

xcode - 如果没有恢复文档,如何自动创建新的 NSDocument?

编辑:似乎只有当我在 Xcode 中运行(我在 4.4 上)而不是从 Finder 中运行时,才会出现以下问题(相反,没有发生...... :)。这是一个 Xcode 错误,还是我遗漏了什么?

我想在应用程序启动时创建一个新的(无标题)NSDocument,以防没有文档自动恢复。TextEdit 和 Safari 都显示我想要的行为,所以看起来这应该是内置的,但我找不到任何选项。

重现我的问题的步骤:如果我在 Xcode 中创建一个新的基于文档的应用程序并运行它,它第一次运行时确实会创建一个无标题的文档。但是,如果我关闭该文档,退出应用程序并再次运行它,它不会给我一个新文档,除非我明确单击 Dock 中的应用程序图标。这与例如 TextEdit 不同,如果您退出并重新启动,您会得到一个新的空文档。(正如预期的那样,更改捆绑标识符会给我另一个新的无标题文档。)

我的第一个想法是这可能应该发生在 中applicationDidFinishLaunching:,但事实证明,该方法是在恢复任何以前打开的文档之前执行的。

0 投票
2 回答
475 浏览

cocoa - 使用 NSApplicationDelegate 时无法让 Apple 的 SimpleScripting 示例正常工作

我正在尝试编写一个简单的 Objective-C 应用程序:我只想要一个在状态栏中显示一个单词并允许通过 AppleScript 更新该单词的应用程序。老实说,我对 AppleScript 知之甚少,对 Objective-C 也一无所知。但是,这并不难,因为我只花了 2 个小时就获得了一个菜单栏应用程序,该应用程序具有菜单项并响应诸如“退出”之类的核心 AppleScript 命令,所以我已经完成了 95% 的工作。不幸的是,我花了接下来的 6 个小时试图找到一种方法来为这个应用程序提供一个我可以通过 AppleScript 获取和设置的简单属性。

这是我的 .h 代码:

foobaz方法是我用来尝试创建可读属性的方法(*window是 XCode 提供的样板文件的一部分,与手头的问题无关)。这是我的 .sdef 文件:

所以我已经像 Apple 的 SimpleScripting 示例一样设置了它:https ://developer.apple.com/library/mac/#samplecode/SimpleScripting/Introduction/Intro.html

但是,我尝试在脚本编辑器中运行它:

而且我只是得到一个核心属性的列表,没有提及foobaz任何内容,这与 Apple 的示例不同,其中自定义属性在我运行时出现在核心属性旁边。

我觉得我已经尝试了一百种变体并阅读了一百个示例,但无法使任何工作。任何帮助表示赞赏。

0 投票
3 回答
942 浏览

macos - 如何禁用上一个文档的自动重新打开?


如何禁用最后一个文档的自动重新打开?


当我执行我的应用程序时,它会调用方法readFromData

但是,问题是在我的版本 1 和我的版本 2 之间,我更改了应用程序保存的数据的结构。在 v1 中,根对象是一个数组。在 v2 中,根对象是一个具有两个键的字典,一个用于字符串,一个用于数组。

当应用程序加载时,它似乎从数据中加载了一个数组,然后尝试从该数组中获取字典键的对象。

我该怎么办 !!??

PS:我试图创建一个 NSApplicationDelegate

但是我的应用程序永远不会调用这些方法。


编辑 :

这是调用堆栈:

0 投票
1 回答
594 浏览

macos - applicationDidBecomeActive 不会在 OSX 应用程序中触发

在我的应用程序中,我有以下设置:

由于某种原因,applicationDidBecomeActive 永远不会被调用。有谁知道我在这里失踪了?!

0 投票
3 回答
2937 浏览

objective-c - NSApplicationDelegate 应用程序:打开文件。永远不会到达 openFile: 函数

我想打开一个文件,将其放在应用程序图标上。当我这样做时,我的应用程序已打开,因此文件扩展名已明确定义并与我的应用程序相关。但是该application:openFile:函数永远不会被调用。所以我无法打开我的应用程序中放置的文件。我追踪openFile:但从未去过。

我找到的所有答案都只是添加到委托中openFile:,这就是全部但不是我的情况。

任何帮助将不胜感激。提前非常感谢。

这是我的环境。

plist 已获得要打开的文件的扩展名。当我删除文件时,我的应用程序已打开。

我在应用程序开始时初始化我的委托,

在代表中,

在包括,

在 .m 文件中,

0 投票
0 回答
576 浏览

objective-c - NSApplication applicationShouldTerminate 在 applicationDidFinishLaunching 之前调用

我有一个奇怪的问题:有一个在 of 中初始化的单例applicationDidFinishLaunchingAppDelegate但在某些情况下,我收到带有EXC_CRASH( SIGSEGV) 的崩溃报告和这样的堆栈跟踪:

所以我看到我的单身人士正在尝试分配并且失败了,所以我想applicationDidFinishLaunching从来没有被调用过。

为什么 OS X 可以在我的应用程序启动之前尝试终止它?

0 投票
1 回答
1085 浏览

objective-c - 应用程序退出崩溃

任何人都可以帮助我解决这个崩溃。当应用程序退出时会发生这种情况,但并非总是如此。

有时,当它在退出时崩溃时,我会收到以下崩溃日志,但这并不总是如此。