objective-c - 如何通过拖放文件来启动非基于文档的 Cocoa 应用程序?

标签 objective-c cocoa

我能够实现此功能的唯一方法是使用基于文档的应用程序(此应用程序不是)。在我的非基于文档的应用程序中,我定义了支持的文档类型(从目标信息窗口的“属性”选项卡),并且我的 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/

相关文章:

ios - UIIView 到 CGContext 横向坐标系

java - Xcode 中的 "Add unimplemented methods"类似于 Eclipse

macos - 在 OS X 10.10 中,我可以在没有 NSCell 的情况下实现 NSControl 吗?

cocoa - 将热键添加到 NSTextField

macos - 使用 kCGBlendModeClear 在 Mac OS X 上实现橡皮擦描边

objective-c - 在基于 View 的 NSTableView 上正确调整行的大小

objective-c - 音频和振动在模拟器而不是 ios 设备上工作

ios - 删除 TableView 中的所有本地通知和单元格

objective-c - 如何将对象从 NSDictionary 插入到 NSMutable 数组

objective-c - 为 NSTableView 中的行着色