簡體   English   中英

UTI似乎沒有得到妥善保存

[英]UTI doesn't seem to be saved properly

我有一個應該嘗試保存Markdown文件的應用程序。 這是我的Info.plist中的相關部分:

<dict>
    <key>CFBundleTypeExtensions</key>
    <array>
        <string>md</string>
    </array>
    <key>CFBundleTypeIconFile</key>
    <string>icon.icns</string>
    <key>CFBundleTypeName</key>
    <string>Markdown document</string>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>LSItemContentTypes</key>
    <array>
        <string>net.daringfireball.markdown</string>
    </array>
    <key>LSHandlerRank</key>
    <string>Owner</string>
    <key>NSDocumentClass</key>
    <string>MyDocument</string>
    <key>NSExportableAs</key>
    <array>
        <string>Microsoft Word Document</string>
        <string>RTF</string>
        <string>HTML</string>
    </array>
    <key>NSExportableTypes</key>
    <array>
        <string>net.daringfireball.markdown</string>
        <string>com.microsoft.word.doc</string>
        <string>public.rtf</string>
        <string>public.html</string>
    </array>
</dict>

如您所見,我還需要該應用程序才能導出到doc,html和rtf。

這是UTExportedTypeDeclarations:

<dict>
    <key>UTTypeConformsTo</key>
    <array>
        <string>public.source</string>
    </array>
    <key>UTTypeDescription</key>
    <string>Markdown document</string>
    <key>UTTypeIdentifier</key>
    <string>net.daringfireball.markdown</string>
    <key>UTTypeTagSpecification</key>
    <dict>
        <key>public.filename-extension</key>
        <array>
            <string>md</string>
        </array>
    </dict>
</dict>

現在當我在我的應用程序中保存文檔,然后在我得到的文件上運行mdls

kMDItemContentType             = "dyn.ah62d4rv4ge8043a"
kMDItemContentTypeTree         = (
    "dyn.ah62d4rv4ge8043a",
    "public.data",
    "public.item"
)

此外,我的應用程序似乎無法打開以前保存的文件並給出錯誤:

錯誤域= NSCocoaErrorDomain代碼= 256“無法重新打開自動保存的文檔”test10.md“.UserInfo = 0x102210bf0 {NSLocalizedDescription =無法重新打開自動保存的文檔”test10.md“。 }

我究竟做錯了什么? 如何讓它正確識別我的UTI?

我相信你的符合是不正確的。 你需要從物理樹和功能樹中獲得超級類型。

文檔中有許多過時的內容,請參閱我的文章,了解您現在真正需要的部分。 例如,您不再需要可導出的類型: http//www.cocoanetics.com/2012/09/fun-with-uti/

關於進口/出口。 這取決於此應用程序是否擁有該文件類型。 如果是,它應該導出它。 如果不是,它應該導入它。 在導出IIRC類型的所有應用程序中,最新的一個獲勝。 任何能夠讀取您的類型的應用都應該導入它。 此外,表明他們能夠使用您的UTI向上工作的應用程序可以打開該文件。 例如,如果您的格式符合純文本,那么TextEdit也可以打開它。

此外,通過您的實驗,您可能無意中搞砸了您的啟動服務UTI注冊表。 我的文章提到了清理它的方法。

在這里猜測,但是如果類型已經存在於您的系統上(這兩者似乎可能是這樣),也許您應該導入它們而不是導出它們?

因此,而不是UTExportedTypeDeclarations這些應該是UTImportedTypeDeclarations陣列。

來自UTI概述

如果您的代碼依賴於系統上可能不存在的第三方UTI類型,則應將這些UTI聲明為捆綁中的導入類型。

暫無
暫無

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

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