我能够实现这一目标的唯一方法是使用基于文档的应用程序(此应用程序不是这样)。在我的非基于文档的应用程序中,我已经定义了支持的文档类型(来自目标信息窗口的“属性”选项卡),我的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>
答案 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)
在目标设置中,转到“属性”选项卡,然后添加到“文档类型”表中。