Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UTI不';似乎没有得救_Objective C_Uti - Fatal编程技术网

Objective c UTI不';似乎没有得救

Objective c UTI不';似乎没有得救,objective-c,uti,Objective C,Uti,我有一个应用程序,应该尝试保存降价文件。这是my Info.plist中的相关部分: <dict> <key>CFBundleTypeExtensions</key> <array> <string>md</string> </array> <key>CFBundleTypeIconFile</key> <string>i

我有一个应用程序,应该尝试保存降价文件。这是my 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>
此外,我的应用程序似乎无法打开以前保存的文件,并出现错误:

错误域=NSCOCAERRORDOMAIN代码=256“自动保存的文档 无法重新打开“test10.md”。UserInfo=0x102210bf0 {NSLocalizedDescription=无法保存自动保存的文档“test10.md” 重新开放。}


我做错了什么?如何使其正确识别我的UTI?

这里是猜测,但是如果类型可能已经存在于您的系统中(这两个类型似乎很可能存在),那么您可能应该导入它们,而不是导出它们

因此,它们应该位于
UTImportedTypeDeclarations
数组中,而不是
UTExportedTypeDeclarations

如果您的代码依赖于系统上可能不存在的第三方UTI类型,则应将这些UTI声明为捆绑包中的导入类型


这里是猜测,但是如果类型可能已经在您的系统上(这两个看起来很可能是),那么您可能应该将它们导入类型而不是导出它们

因此,它们应该位于
UTImportedTypeDeclarations
数组中,而不是
UTExportedTypeDeclarations

如果您的代码依赖于系统上可能不存在的第三方UTI类型,则应将这些UTI声明为捆绑包中的导入类型


我认为你的意见是错误的。您需要从物理树和功能树中获得一个超级类型

文档中有很多过时的东西,请参阅我的文章,了解您现在真正需要的部件。例如,您不再需要可导出类型:

关于进出口。这取决于此应用是否拥有该文件类型。如果是这样,它应该将其导出。如果没有,它应该导入它。在所有导出IIRC类型的应用程序中,最新的应用程序获胜。任何能够读取您的类型的应用程序都应该导入它。此外,如果应用程序声明它们能够使用您的UTI,则可以打开该文件。e、 g.如果您的格式符合纯文本,则TextEdit也可以打开它


此外,在进行实验时,您可能会无意中弄乱了LaunchServices UTI注册表。我的文章提到了一种清洁它的方法。

我认为您的符合是不正确的。您需要从物理树和功能树中获得一个超级类型

文档中有很多过时的东西,请参阅我的文章,了解您现在真正需要的部件。例如,您不再需要可导出类型:

关于进出口。这取决于此应用是否拥有该文件类型。如果是这样,它应该将其导出。如果没有,它应该导入它。在所有导出IIRC类型的应用程序中,最新的应用程序获胜。任何能够读取您的类型的应用程序都应该导入它。此外,如果应用程序声明它们能够使用您的UTI,则可以打开该文件。e、 g.如果您的格式符合纯文本,则TextEdit也可以打开它


此外,在进行实验时,您可能会无意中弄乱了LaunchServices UTI注册表。我的文章提到了一种清理它的方法。

问题是,如果我的一些用户没有安装该类型,会发生什么情况?文档中说:“导入的UTI声明用于声明捆绑包不拥有的类型,但希望看到该类型在系统上可用。例如,假设视频编辑程序使用专有格式创建文件,其UTI在其应用程序包中声明。如果您正在编写能够读取此类文件的应用程序或插件,则必须确保系统了解专有UTI,即使实际的视频编辑应用程序不可用。要做到这一点,您的应用程序应该在自己的包中重新声明UTI,但将其标记为导入声明。“啊,看起来上面缺少了另一个部分。很高兴您让它正常工作。然后问题是,如果我的一些用户没有安装该类型,会发生什么?文档中说:”导入的UTI声明用于声明捆绑包不拥有的类型,但希望看到该类型在系统上可用。例如,假设视频编辑程序使用专有格式创建文件,其UTI在其应用程序包中声明。如果您正在编写能够读取此类文件的应用程序或插件,则必须确保系统了解专有UTI,即使实际的视频编辑应用程序不可用。为此,应用程序应该在自己的包中重新声明UTI,但将其标记为导入的声明。“啊,看起来上面还有一块你丢的东西。很高兴你能使用它。是的,将
public.item
添加到我的
UTTypeConformsTo
中成功了。是的,将
public.item
添加到我的
UTTypeConformsTo
中成功了。
<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>
kMDItemContentType             = "dyn.ah62d4rv4ge8043a"
kMDItemContentTypeTree         = (
    "dyn.ah62d4rv4ge8043a",
    "public.data",
    "public.item"
)