Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.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
iOS上使用的UTImportedTypeDeclarations和UTExportedTypeDeclarations是什么?_Ios_Uti - Fatal编程技术网

iOS上使用的UTImportedTypeDeclarations和UTExportedTypeDeclarations是什么?

iOS上使用的UTImportedTypeDeclarations和UTExportedTypeDeclarations是什么?,ios,uti,Ios,Uti,我是在这里遇到打字错误,还是iOS上确实存在这两种变体: UTImportedTypeDeclarations UTExportedTypeDeclarations 两者都会在谷歌上返回一些结果,但后者的点击率是前者的两倍。 这些plist键是用来做什么的?与CbundledDocumentTypes有什么区别?CbundledDocumentTypes似乎已经做了我认为其他两个做的事情,即允许应用程序打开特定的文件类型?如果应用程序定义了新的UTI,则使用UTExportedTypeDec

我是在这里遇到打字错误,还是iOS上确实存在这两种变体:

  • UTImportedTypeDeclarations
  • UTExportedTypeDeclarations
两者都会在谷歌上返回一些结果,但后者的点击率是前者的两倍。
这些plist键是用来做什么的?与
CbundledDocumentTypes
有什么区别?CbundledDocumentTypes似乎已经做了我认为其他两个做的事情,即允许应用程序打开特定的文件类型?

如果应用程序定义了新的UTI,则使用
UTExportedTypeDeclarations
。这将告诉系统您自己的自定义UTI

如果您的应用程序使用由其他人创建但未由系统定义的UTI,则使用
UTImportedTypeDeclarations

UTExportedTypeDeclarations
您可以使用
UTExportedTypeDeclarations
定义自己的UTI,该UTI是您的应用程序想要设定安装在其上的系统。UTI描述一段数据(不一定是文件中的数据!),并且至少需要一个标识符(
com.example.mycoldatatype
)。此外,它可能有一个名称(
My Cool Data Type
)、一个或多个文件扩展名(
.myColDataType
)、一个或多个MIME类型(
x-application/My Cool Data Type
)、一个或多个粘贴板类型(使用复制和粘贴传输此类数据时使用)以及一个或多个遗留操作系统类型(四字符代码,OS X不再使用,这是MacOS 9及更早版本的系统类型)。通常,您还希望UTI符合现有UTI,这样,不知道您的UTI但知道其中一个符合的UTI的应用程序仍然能够对其执行有意义的操作。例如,当您说您的UTI符合
public.data
,任何可以处理通用数据的进程也可以将您的UTI作为您的UTI ID处理描述通用数据

系统有一个包含所有已知UTI的数据库,当您的应用程序定义新的UTI时,这些UTI会自动添加到数据库中,因此整个系统都知道。请注意,您的应用程序定义这些UTI并不意味着它也可以“处理”包含此类数据的文件

典型用法示例:
您定义了自己的专有文件数据格式,并且希望其他应用程序、插件、扩展等也知道此数据格式

UtiImportedTypeDeclarations 使用
UTImportedTypeDeclarations
向系统教授您希望在系统中知道但不是您的UTIs的UTIs。值与
UTExportedTypeDeclarations
的值相同,所有类型也添加到数据库中,因此在整个系统中都可见

UTExportedTypeDeclarations
UTImportedTypeDeclarations
之间的区别在于,您在
UTExportedTypeDeclarations
中声明了UTI的所有权,这意味着如果系统已经知道UTI,但存储的值与您的值不同,则您的值会按原样更新存储的值您的UTI,因此您的描述始终被认为是权威的!对于
UTImportedTypeDeclarations
,系统甚至不会查看这些类型,因为您所说的是不权威的。这些只会考虑到目前为止未知的类型,并且只要任何应用程序在
UTExportedTypeD下列出相同的UTIeclarations
,该应用程序的值将覆盖应用程序给定的值

典型用法示例:
您的应用程序能够读取另一个应用程序的专有数据格式,但您甚至不知道该应用程序是否已安装在系统上。要使该数据格式为人所知,您可以将其声明为导入,因为一旦用户安装有问题的应用程序,您就希望该应用程序正确定义数据格式给你

CbundleDocumentTypes
您可以使用
CbundleDocumentTypes
告诉系统您的应用程序可以打开哪些文档类型。除非您在此处列出您的UTI,否则这些UTI不会与Finder中的应用程序关联,并且您的应用程序不会出现在
open with>
菜单中。如果您将所有文件类型定义为UTI,则您需要为每个文档类型提供的所有信息文档类型是UTI和角色。如果未被文档类型覆盖,则名称、图标、文件扩展名或MIME类型等内容都将取自UTI。但是,请注意,您可以定义文档类型,而无需定义UTI,在这种情况下,您必须直接在文档类型上设置所有这些值。您只需必须为文档类型设置的方式是角色。角色可以是“查看器”(可以显示该文件类型,但不能编辑)、“编辑器”(可以显示和编辑该文件类型)、“无”(未指定可以对该文件执行的操作)


典型用法示例:
您希望您的应用程序与某些文件类型关联,通过扩展名、MIME类型或UTI标识符标识。如果您希望您的应用程序与UTI类型关联,应用程序应导入或导出该类型,否则系统可能不知道该类型并注册到未知的UTI类型e根本没有任何作用。

如何处理这些UTI?在你的应用程序中引用它们。这可以与
UIDocumentInteractionController
一起使用,或者指示你的应用程序应该出现在另一个应用程序的“打开中”这些类型文件的菜单。我已将
CbundleDocumentTypes
添加到我的应用程序中,这足以使我的应用程序显示在其他应用程序的“打开位置”菜单中。
CbundleDocumentTypes
用于定义应用程序可以打开的文件类型。因此,是的,添加它将允许应用程序显示在“打开位置”菜单中我发现了一篇很好的帖子:它解释了为什么
CFBundleDocumentTypes
足以获得一个文件类型