0

私は次の機能を持っています:

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

    _pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pathUrl);
}

Toll-Free Bridgingを介してanNSURL*から a にケースできるため、ドキュメントからどれがうまくいくと信じています。ただし、この関数は失敗し、ログに次の出力が表示されます。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)
}

私は何が欠けていますか?コードに 2 番目の関数を残しておいてよかったのですが、最初の関数が失敗した理由を知りたいです。

4

2 に答える 2

5

ファイル システム パスを URL に変換するには、次を使用します。

NSURL *pathUrl = [NSURL fileURLWithPath:path];

URLWithString「スキーム」などを含む、「http://...」や「file:///...」などの RFC 2396 準拠の URL 文字列が必要です。

追加:実際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 に答える