要实现在其他应用中文件的打开方式列表中显示需要以下两个步骤(测试的时候需要真机条件):

  ->首先要向iOS系统注册App能够打开的文件类型,这样其他应用程序在使用 Document Interaction 向系统询问有哪些程序可以打开文档

      时,系统才会将你的应用显示在“打开方式”的列表中。

  ->完成注册步骤后我们需求的功能就已经完成一大半了,现在进行真机测试比如在邮件里的附件(必须是刚刚注册过的文件类型)使

     用“打开方式”就可以看到我们的应用程序出现在了列表中。但这样仅仅是通过打开方式启动了我们的App,而我们的App并不能直接接

     收到传过来的文档,我们都知道在 iOS 中每个应用都是装在一个独立的沙盒中的,应用中的文件并不能直接跨越沙盒传输,这时候使

     用的便是 Document Interaction ,原理就是对文档生成一个URL路径,通过 UIDocumentInteractionController 返回一个URL路径,然

     后在我们的App中截取URL,通过URL来获取我们需要的文档。


1、向iOS系统申明App能够打开某种类型的文档。

   -> 情景一:直接使用系统提供的UTI (UTI与文件后缀对照

        表:https://developer.apple.com/library/mac/#documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html)

       在info.plist中添加以下字段

Icon File Name ( “打开方式”列表中应用显示的图标,可不设 )
         Document Type Name ( 指定文档名称 )
         Document Content Type UTIs ( 数组,包含多个 UTI 类型的字符串。UTI 类型是本文档类型(组)所包含的文件类型。 )
         Handler rank ( 表示应用程序是“拥有”还是仅仅是“打开”这种类型而已 )


   -> 情景二:使用程序提供的UTI

        先在info.plist中添加以下字段

        首先还是Document types:

CFBundleTypeIconFiles ( 数组,“打开方式”列表中应用显示的图标 )
         Document Content Type UTIs ( 程序定义UTI也需在此声明,命名规则:App ID + .后缀名 )
         Role ( 程序的职责,“观看”、“编辑”等 )

         其它字段参考情景一

   

        完成Document types 字段后需给自定义的UTI一个说明——即在plist中添加如下字段

Exported Type UTIs:
        Conforms to UTIs ( 参考情景一中给出的参照表 )
        Description ( 描述,可不填 )
        Identifier ( 唯一标识,跟Document Content Type UTIs 中自定义的UTIs 保持一致 )
        Equivalent Types ( 包含两个字段,public.filename-extension:和什么后缀的文件相关联,public-mime-type: mime 类型 )


2、截取其他App发过来的资源文件

     在Xcode中我们的App,并在 AppDelegate 中加入如下代码

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if (url != nil) {
        NSString *path = [url absoluteString];
        NSMutableString *string = [[NSMutableString alloc] initWithString:path];
        if ([path hasPrefix:@"file://"]) {
            [string replaceOccurrencesOfString:@"file://" withString:@"" options:NSCaseInsensitiveSearch  range:NSMakeRange(0, path.length)];
        }
    }
    return YES;
}


OK,这样就大功告成了,接下来我们就成功获取到了文档的URL了,接下来就根据自己的需求来操作文档吧~

(注:我们获取到的URL路径中如果包含中文的话有可能不能成功获取到文件,这时候需要一次对URL的转码方法是利用NSString 的 [string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding])