簡體   English   中英

如何通過將文件拖放到非基於文檔的Cocoa應用程序來啟動它?

[英]How do I launch a non-document-based Cocoa application by dropping files on it?

我能夠使它正常工作的唯一方法是使用基於文檔的應用程序(該應用程序不是)。 在非基於文檔的應用程序中,我已經定義了受支持的文檔類型(從“目標信息”窗口的“屬性”選項卡中),並且我的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>

您不是說這至少要成為Viewer嗎?

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

您想在這里做什么? 為什么將磁盤上的文件指定為內存中的Core Data持久存儲? 如果要在加載時將整個內容提升到內存中,則稱為Binary或XML,而不是InMemory。

我還建議您為文檔類型定義UTI,而不僅僅是擴展名。

您還應該使用lsregister仔細檢查Launch Services認為正在進行的lsregister 有時,問題在於您的應用有多個版本,而Launch Services找不到您認為應該擁有的版本。 您可以這樣查找Launch Services數據庫:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump

這應該適用於10.5和10.6。 10.4將lsregister放在其他位置。 我通常使用locate來查找它,而不是嘗試記住它。

在“目標”設置中,轉到“屬性”選項卡,然后添加到“文檔類型”表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM