使用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
网友评论