美文网首页
iOS - 文件读取操作

iOS - 文件读取操作

作者: 西瓜一号 | 来源:发表于2021-10-28 15:01 被阅读0次

    项目需求

    1.从微信\QQ导入文件
    2.从iCloud导入文件

    思路

    从微信/QQ导入文件

    1.APP内打开微信/QQ
    2.微信/QQ选取文件
    3.选择其他应用打开
    4.APP内接收

    从本地导入文件

    1.打开iCloud
    2.选择文件
    3.APP内接收

    实现需求1

    1.APP内打开微信/QQ,首先需要设置白名单,在项目info.plist文件添加LSApplicationQueriesSchemes字段,类型设置Array,添加微信:weixin;QQ:mqq,添加完成如下图所示:

    <key>LSApplicationQueriesSchemes</key>
        <array>
            <string>mqq</string>
            <string>weixin</string>
        </array>
    
    image.png

    2.添加其他应用打开权限,在项目info.plist文件添加CFBundleDocumentTypes字段,类型设置Array

    <key>CFBundleDocumentTypes</key>
        <array>
            <dict>
                <key>CFBundleTypeName</key>
                <string></string>
                <key>LSHandlerRank</key>
                <string>Default</string>
                <key>LSItemContentTypes</key>
                <array>
                    <string>com.adobe.pdf</string>
                    <string>com.microsoft.word.doc</string>
                    <string>com.microsoft.powerpoint.ppt</string>
                    <string>public.item</string>
                    <string>public.data</string>
                    <string>public.text</string>
                    <string>public.content</string>
                    <string>public.composite-content</string>
                </array>
            </dict>
        </array>
    
    image.png

    3.app内打开微信/QQ

    //从qq获取文件
    - (IBAction)touchGoQQBtn:(id)sender {
        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]]) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mqq://"] options:@{} completionHandler:nil];
        }
    }
    //从微信获取文件
    - (IBAction)touchGoWeChatBtn:(id)sender {
        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"] options:@{} completionHandler:nil];
        }
        
    }
    

    4.微信/QQ内操作
    打开文件

    微信打开文件.jpg 微信选择其他应用打开.jpg 选择我们的项目.jpg

    5.app内接收文件,在AppDelegate添加以下方法

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
        // 文件路径file:///private/var/mobile/Containers/Data/Application/B5C8630F-0A5D-4795-B3D0-81B8CCAB6909/Documents/Inbox/%E9%A1%B9%E7%9B%AE%E5%91%A8%E6%8A%A5%E6%B1%87%E6%80%BB202100607.xlsx
        NSLog(@"url  %@",[url absoluteString]);
        // 通过前缀来判断是文件
        if ([[url absoluteString] containsString:@"file"]) {
            NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
           // 去除前缀
            NSString *fileName = [array lastObject];
            fileName = [fileName stringByRemovingPercentEncoding];
           //发送通知,附带文件路径
            [[NSNotificationCenter defaultCenter] postNotificationName:@"xx" object:path];
            //或者本地存储
            //Documents目录 :用于存储用户数据或其它应该定期备份的信息。
            // tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。
            NSString *path = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"/Documents/xx/%@",fileName]];
    
            NSData *data = [NSData dataWithContentsOfFile:path];
            //文件写入结果
            BOOL result = [data writeToFile:path atomically:YES];
    
        }
        return YES;
    }
    

    6.接收通知,根据需求处理,,,,

    实现需求2

    1、登陆开发者后台,配置权限,选择自己的项目

    选择自己的项目.png 勾选iCloud权限.png

    Edit选择自己的项目
    2.xcode配置


    image.png
    image.png
    image.png

    以上配置如有遗漏,可能造成的后果有,或不走回调,或回调返回失败,或不能获取文件路径等

    3.代码实现
    打开iCloud

    //从icloud获取文件
    - (IBAction)touchGoiCloudBtn:(id)sender {
        
        //设置可以打开的文件类型,如没有设置可打开的类型,iCloud文件将是灰色,无法选中
        NSArray *documentTypes = @[@"public.content", @"public.text", @"public.source-code ", @"public.image", @"public.audiovisual-content", @"com.adobe.pdf", @"com.apple.keynote.key", @"com.microsoft.word.doc", @"com.microsoft.excel.xls", @"com.microsoft.powerpoint.ppt"];
        UIDocumentPickerViewController *documentPickerViewController = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:documentTypes inMode:UIDocumentPickerModeOpen];
        documentPickerViewController.delegate = self;
        [self presentViewController:documentPickerViewController animated:YES completion:nil];
        
    }
    
    #pragma mark - UIDocumentPickerDelegate
    - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
        
        NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
        NSString *fileName = [array lastObject];
        fileName = [fileName stringByRemovingPercentEncoding];
        
       //如需存储本地,还需从iCloud下载数据
    }
    
    

    需求完成,收工干饭

    相关文章

      网友评论

          本文标题:iOS - 文件读取操作

          本文链接:https://www.haomeiwen.com/subject/bdomaltx.html