ios11 QLPreviewController Couldn't issue file extension for path

iOS11 项目资源里面,查看PDF文档的时候,提示Couldn't issue file extension for path错误,解决办法就是把资源文件copy到沙盒里面,再从沙盒里面读取文件

#import "TEChargeStandardViewController.h"
#import <QuickLook/QuickLook.h>

@interface TEChargeStandardViewController ()<QLPreviewControllerDataSource,QLPreviewControllerDelegate>

@property (nonatomic,strong) NSURL *filePathUrl;
@end

@implementation TEChargeStandardViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = WhiteColor;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [paths objectAtIndex:0];
    NSString *path = [docDir stringByAppendingPathComponent:@"chargestandard.pdf"];
    NSString *path2 = [[NSBundle mainBundle] pathForResource:@"chargestandard.pdf" ofType:nil];
    BOOL filesPresent = [self copyMissingFile:path2 toPath:docDir];//copy到沙盒
    if (filesPresent) {
        NSLog(@"OK");
        self.filePathUrl = [NSURL fileURLWithPath:path];
        /// 原理是使用自定义控制器,加载QLPreviewController的view,比较方便灵活
        if ([QLPreviewController canPreviewItem:(id<QLPreviewItem>)self.filePathUrl]) {
            QLPreviewController* previewer = [[QLPreviewController alloc] init];
            previewer.dataSource = self;
            previewer.delegate = self;
            previewer.view.frame = self.view.bounds;
            [self.view addSubview:previewer.view];
            [self addChildViewController:previewer];
        }
    }
    else
        
    {
        
        NSLog(@"NO");
        
    }
}
#pragma mark --- 返回加载文件个数
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
    return 1;
}
#pragma mark --- 返回加载路径
- (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
    return self.filePathUrl;
}
//把资源文件copy到沙盒里面
- (BOOL)copyMissingFile:(NSString *)sourcePath toPath:(NSString *)toPath
{
    
    BOOL retVal = YES; // If the file already exists, we'll return success…
    
    NSString * finalLocation = [toPath stringByAppendingPathComponent:[sourcePath lastPathComponent]];
    
    if (![[NSFileManager defaultManager] fileExistsAtPath:finalLocation])
    {
        
        retVal = [[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:finalLocation error:NULL];
    }
    return retVal;
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值