菜鸟教程小白 发表于 2022-12-12 18:20:14

ios - 当另一个应用程序错误地定义了 UTI 时如何解决?


                                            <p><p>这个主题主要是关于 iOS,尽管它也可能适用于 OS X。</p>

<p>我在我的应用程序的 <code>UTImportedTypeDeclarations</code> 中声明了 <code>.md</code> 扩展名(以及其他)属于 UTI <code>net.daringfireball.markdown</code>。这个 UTI 是 <a href="http://daringfireball.net/linked/2011/08/05/markdown-uti" rel="noreferrer noopener nofollow">recommended by Markdown&#39;s initial author</a> ,因此被认为是规范的。 </p>

<p>然后我使用 <code>UIDocumentPickerViewController</code> 从 Dropbox 打开 Markdown 文件,间接使用 Dropbox 的应用扩展。创建该 Controller 时,我特别将 <code>net.daringfireball.markdown</code> 作为接受的 UTI 之一传递。</p>

<p>令我惊讶的是,该操作返回的 UTI 是 <code>pro.writer.markdown</code>。而我的代码期望 <code>net.daringfireball.markdown</code> 来确定返回的文件是否确实是 Markdown 文件。对于我的应用程序,<code>pro.writer.markdown</code> 无法识别,实际上它不在 <code>UIDocumentPickerViewController</code> 选择的 UTI 列表中。 </p>

<p>经过进一步调查,我手机中的另一个应用程序在其 <code>UTExportedTypeDeclarations</code> 列表中声明了 <code>pro.writer.markdown</code>。该应用程序是 iA Writer。</p>

<p>现在解决这个问题的最佳方法是什么?这些是我现在想到的:</p>

<ul>
<li><p>承认失败并在另一个 UTI 中添加“或”子句:</p>

<pre><code>//...
else if(UTTypeConformsTo(fileUTI,@&#34;net.daringfireball.markdown&#34;) || UTTypeConformsTo(fileUTI,@&#34;pro.writer.markdown&#34;)) {
... // handle Markdown file
</code></pre> </li>
<li><p>回退到纯文本的“父类(super class)”UTI:</p>

<pre><code>//...
else if(UTTypeConformsTo(fileUTI,@&#34;net.daringfireball.markdown&#34;) || UTTypeConformsTo(fileUTI,kUTTypePlainText)) {
... // handle Markdown file
</code></pre> </li>
</ul>

<p>第一个缺点是我需要列出所有其他应用程序对 Markdown 的错误声明。第二个似乎更合理,但我想知道我是否忽略了什么?</p>

<p>或者有比这两个更好的选择吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>一个选项是检查所选文件的文件扩展名。</p>

<pre><code>- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
    NSString *fileUTI = ...
    if ( || UTTypeConformsTo(fileUTI, @&#34;net.daringfireball.markdown&#34;)) {
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 当另一个应用程序错误地定义了 UTI 时如何解决?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34927527/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34927527/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 当另一个应用程序错误地定义了 UTI 时如何解决?