objective-c - 如何检测应用程序是否基于文档?

标签 objective-c cocoa macos

我正在开发一个 Cocoa/Objective C 应用程序,它可以使用 AppScript 从任何应用程序中读取事件文档。我已经成功完成了这一部分,但如果能够确定应用程序是否基于文档,那就太好了。

显而易见的方法是查看应用程序内事件窗口的 AXDocument 属性,如果它包含路径,我们就知道该应用程序是基于文档的。但是,如果文档未保存,则此操作不起作用。这也相当笨拙。相当烦人的是,AXDocument 属性可能出现在非文档应用程序中,因此它的存在或不存在不能用于提供我所寻求的信息。

我尝试查看通过应用程序进程和单个窗口的 AppleScript 公开的其他属性和属性。这些项目似乎都没有告诉我该应用程序是否基于文档。

我还尝试查看一些 Info.plist 文件,但看不到任何可靠地表明这一点的内容。是我看的还不够仔细吗?或者在 Objective C 或 AppleScript 中有没有好的方法可以做到这一点?

最佳答案

根据 Document-Based Application Architecture 构建的基于文档的应用程序指南应满足几个条件。 我不确定是否/如何可以访问 Mac OS 上的不同应用程序,但通过反射(在 Objective-C 中),您可以测试 NSDocument 子类是否存在。 另一个想法是只查看菜单项...是否有"file"->“新建”、"file"->“打开”菜单项?

关于objective-c - 如何检测应用程序是否基于文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666529/

相关文章:

objective-c - 预处理器语句的顺序给了我警告?

macos - 插件和框架的区别

ios - 生成PDF时出现内存压力崩溃

objective-c - mkmapview 中注释引脚的自定义图像

java - JavaVM.框架。它是什么?我该如何使用它?

xcode - Swift项目快速使用MASShortcut框架

objective-c - 您可以使用 MacRuby 为 Mac App Store 开发应用程序吗?

objective-c - 如何使用界面生成器在 xcode 4 中设置 NSTableColumn 的标识符?

iphone - 需要做与 NSSelectorFromString() 相反的事情

iphone - 在 for 循环中附加字符串 (NSString) 时遇到问题