美文网首页
iOS 从iCloud中获取文件

iOS 从iCloud中获取文件

作者: XuTong | 来源:发表于2018-01-03 10:50 被阅读1160次
    • iCloud

    使用UIDocumentPickerViewController

    - (void)presentDocumentPicker {
        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];
    }
    

    在UIDocumentPickerDelegate依次执行,获取文件名,文件数据,写入沙盒Documents

    #pragma mark - UIDocumentPickerDelegate
    
    - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
        
        NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
        NSString *fileName = [array lastObject];
        fileName = [fileName stringByRemovingPercentEncoding];
        
        if ([iCloudManager iCloudEnable]) {
            [iCloudManager downloadWithDocumentURL:url callBack:^(id obj) {
                NSData *data = obj;
                
                //写入沙盒Documents
                 NSString *path = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"/Documents/%@",fileName]];
                [data writeToFile:path atomically:YES];
            }];
        }
    }
    

    iCloudManager

    #import <Foundation/Foundation.h>
    
    typedef void(^downloadBlock)(id obj);
    
    @interface iCloudManager : NSObject
    
    + (BOOL)iCloudEnable;
    
    + (void)downloadWithDocumentURL:(NSURL*)url callBack:(downloadBlock)block;
    
    @end
    
    

    判断iCloud是否可用

    + (BOOL)iCloudEnable {
        
        NSFileManager *manager = [NSFileManager defaultManager];
        
        NSURL *url = [manager URLForUbiquityContainerIdentifier:nil];
    
        if (url != nil) {
            return YES;
        }
        
        NSLog(@"iCloud 不可用");
        return NO;
    }
    

    通过UIDocument子类ZZDocument,传入url获取数据

    + (void)downloadWithDocumentURL:(NSURL*)url callBack:(downloadBlock)block {
        
        ZZDocument *iCloudDoc = [[ZZDocument alloc]initWithFileURL:url];
        
        [iCloudDoc openWithCompletionHandler:^(BOOL success) {
            if (success) {
                
                [iCloudDoc closeWithCompletionHandler:^(BOOL success) {
                    NSLog(@"关闭成功");
                }];
                
                if (block) {
                    block(iCloudDoc.data);
                }
                
            }
        }];
    }
    

    ZZDocument

    #import <UIKit/UIKit.h>
    
    @interface ZZDocument : UIDocument
    @property (nonatomic, strong) NSData *data;
    @end
    
    
    #import "ZZDocument.h"
    
    @implementation ZZDocument
    
    - (BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError * _Nullable __autoreleasing *)outError {
        self.data = contents;
        return YES;
    }
    
    @end
    

    参考博客
    http://www.cocoachina.com/ios/20160817/17382.html

    相关文章

      网友评论

          本文标题:iOS 从iCloud中获取文件

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