如何通过删除文件来启动非基于文档的Cocoa应用程序?

时间:2010-02-17 14:11:43

标签: 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>

2 个答案:

答案 0 :(得分:1)

这两部分让我怀疑:

    <key>CFBundleTypeRole</key>
    <string>None</string>

你不是说这至少是观众吗?

    <key>NSPersistentStoreTypeKey</key>
    <string>InMemory</string>

你想在这做什么?为什么将磁盘上的文件指定为内存中的Core Data持久存储?如果你想在加载它时将整个内容提升到内存中,那就称为二进制或XML,而不是InMemory。

我还建议您为文档类型定义UTI,而不仅仅是扩展名。

您还应该使用lsregister仔细检查Launch Services认为的情况。有时候问题是你的应用程序有多个版本,而Launch Services没有找到你认为它应该有的版本。您可以像这样查看Launch Services数据库:     /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump

这应该适用于10.5和10.6。 10.4 lsregister位于不同的地方。我通常使用locate来找到它而不是试图记住它。

答案 1 :(得分:0)

在目标设置中,转到“属性”选项卡,然后添加到“文档类型”表中。