CGPDFDocumentCreateWithURL失败(NSURL到cflref的免费桥接)



我有以下函数:

- (void)loadPdfFromPath:(NSString*)path
{   
    NSURL *pathUrl = [NSURL URLWithString:path];
    _pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pathUrl);
}

从文档中,我相信它会起作用,因为您可以通过免费桥接从NSURL*CFURLRef。然而,这个函数失败了,我在日志中得到以下输出:

cflcreatedataandpropertiesfromresource:错误码-15.

NB: -15 = kCFURLImproperArgumentsError

但是,如果我创建一个实际的CFURLRef,它绝对工作得很好:

- (void)loadPdfFromPath:(NSString*)path
{
    CGPDFDocumentRelease(_pdfDocument);
    CFStringRef cgPath = CFStringCreateWithCString(NULL, [path UTF8String], kCFStringEncodingUTF8);
    CFURLRef url = CFURLCreateWithFileSystemPath(NULL, cgPath, kCFURLPOSIXPathStyle, 0);
    _pdfDocument = CGPDFDocumentCreateWithURL(url);
    CFRelease(url);
    CFRelease(cgPath)
}

我错过了什么?我很高兴在我的代码中保留第二个函数,但我更想知道为什么第一个会失败。

要将文件系统路径转换为URL,请使用

NSURL *pathUrl = [NSURL fileURLWithPath:path];

URLWithString期望符合RFC 2396的URL字符串,如"http://..."或"file:///…",包括"scheme"等。

添加:实际上NSURL *pathUrl = [NSURL URLWithString:path];返回一个有效的对象,所以它似乎工作,但从这个URL(例如dataWithContentsOfURL)读取失败。

您需要将NSString转换为CFStringRef,然后调用cflcreatewithfilesystempath;

CFStringRef aCFString = (__bridge CFStringRef)path;
CFURLRef url = CFURLCreateWithFileSystemPath (NULL, aCFString,  kCFURLPOSIXPathStyle, 0);
NSLog(@"NSURL %@",url);

最新更新