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

Mar*_*ram 0 pdf xcode core-graphics objective-c

我有以下功能:

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

    _pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pathUrl);
}
Run Code Online (Sandbox Code Playgroud)

从我带领相信会工作,因为你可以从一个区分的文件NSURL*到一个CFURLRef通过免费电话桥接.但是,此函数失败,我在日志中得到以下输出:

CFURLCreateDataAndPropertiesFromResource:错误代码-15.

注意:-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)
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n R 5

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

NSURL *pathUrl = [NSURL fileURLWithPath:path];
Run Code Online (Sandbox Code Playgroud)

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

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