[英]CGPDFDocumentCreateWithURL fails (Toll-Free bridging of NSURL to CFURLRef)
我有以下功能:
- (void)loadPdfFromPath:(NSString*)path
{
NSURL *pathUrl = [NSURL URLWithString:path];
_pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pathUrl);
}
我認為可以從文檔中找到哪種方法是可行的,因為您可以通過免費電話橋接將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)
}
我想念什么? 我很高興將第二個函數保留在代碼中,但我想知道為什么第一個函數會失敗。
要將文件系統路徑轉換為URL,請使用
NSURL *pathUrl = [NSURL fileURLWithPath:path];
URLWithString
需要符合RFC 2396的URL字符串,例如“ http:// ...”或“ file:/// ...”,包括“ scheme”等。
補充:實際上NSURL *pathUrl = [NSURL URLWithString:path];
返回一個有效的對象,因此它似乎可以工作 ,但是從此URL(例如dataWithContentsOfURL
)讀取失敗。
您需要將NSString轉換為CFStringRef,然后調用CFURLCreateWithFileSystemPath;。
CFStringRef aCFString = (__bridge CFStringRef)path;
CFURLRef url = CFURLCreateWithFileSystemPath (NULL, aCFString, kCFURLPOSIXPathStyle, 0);
NSLog(@"NSURL %@",url);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.