0

我有以下功能:

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

    _pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pathUrl);
}

从文档中我相信它会起作用,因为您可以通过Toll-Free BridgingNSURL*从一个案例到一个案例。但是,此功能失败,我在日志中得到以下输出: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)
}

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

4

2 回答 2

5

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

NSURL *pathUrl = [NSURL fileURLWithPath:path];

URLWithString需要一个符合 RFC 2396 的 URL 字符串,例如“http://...”或“file:///...”,包括“scheme”等。

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

于 2013-04-06T09:22:36.347 回答
2

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

CFStringRef aCFString = (__bridge CFStringRef)path;
CFURLRef url = CFURLCreateWithFileSystemPath (NULL, aCFString,  kCFURLPOSIXPathStyle, 0);
NSLog(@"NSURL %@",url);
于 2016-04-21T22:20:40.923 回答