我能够实现此功能的唯一方法是使用基于文档的应用程序(此应用程序不是)。在我的非基于文档的应用程序中,我定义了支持的文档类型(从目标信息窗口的“属性”选项卡),并且我的 AppDelegate 实现了 application:openFile:
和 application:openFiles:
。这样,当应用程序已经启动时,可以将文件拖放到应用程序的 Dock 图标上,但不能将文件拖放到 Finder 中的图标(已启动或以其他方式)。我错过了什么?
已更新
根据要求,我的文档类型数组:
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>nsf</string>
<string>nsfe</string>
</array>
<key>CFBundleTypeName</key>
<string>NSF Soundtrack</string>
<key>CFBundleTypeRole</key>
<string>None</string>
<key>LSTypeIsPackage</key>
<false/>
<key>NSPersistentStoreTypeKey</key>
<string>InMemory</string>
</dict>
</array>
最佳答案
其中有两个部分让我怀疑:
<key>CFBundleTypeRole</key>
<string>None</string>
您不是说这至少是查看者吗?
<key>NSPersistentStoreTypeKey</key>
<string>InMemory</string>
你想在这里做什么?为什么您的磁盘文件被指定为内存中的 Core Data 持久存储?如果您想在加载时将整个内容提升到内存中,则称为 Binary 或 XML,而不是 InMemory。
我还建议您为文档类型定义 UTI,而不仅仅是扩展名。
您还应该使用 lsregister
仔细检查 Launch Services 认为发生的情况。有时,问题在于您的应用程序有多个版本,而启动服务尚未找到您认为应该有的版本。您可以像这样查看启动服务数据库:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump
这应该适用于 10.5 和 10.6。 10.4 在不同的地方有lsregister
。我通常使用locate
来找到它,而不是试图记住它。
关于objective-c - 如何通过拖放文件来启动非基于文档的 Cocoa 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2281294/