Как преобразовать путь NSString в CFURLRef (для iOS 3.1)? - PullRequest
7 голосов
/ 24 мая 2011

Я отображаю PDF в UIScrollView. Для этого я использую:

myDocumentRef = CGPDFDocumentCreateWithURL((CFURLRef)[[NSBundle mainBundle] URLForResource:@"salonMap" withExtension:@"pdf"]);

Теперь я пытаюсь заставить его работать на IOS 3.1 (NSBundle URLForResource: withExtension не существует для 3.1)

Я превратил свой код в:

NSString *fullPath =  [[NSBundle mainBundle] pathForResource:@"salonMap" ofType:@"pdf"];
NSLog(@"%@", fullPath);
CFStringRef fullPathEscaped = CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)fullPath, NULL, NULL,kCFStringEncodingUTF8);
CFURLRef urlRef = CFURLCreateWithString(NULL, fullPathEscaped, NULL);
myDocumentRef = CGPDFDocumentCreateWithURL(urlRef);

Но это приводит к

<Error>: CFURLCreateDataAndPropertiesFromResource: failed with error code -15

Я уточнил, что NSLog регистрирует

/var/mobile/Applications/1CF69390-85C7-45DA-8981-A279464E3249/myapp.app/salonMap.pdf"

Как мне это исправить?

Ответы [ 2 ]

9 голосов
/ 24 мая 2011

NSURL является взаимозаменяемым с CFURLRef благодаря бесплатному мостовому соединению. Попробуйте это:

NSString *pdfPath = [[NSBundle mainBundle] 
                     pathForResource:@"salonMap" ofType:@"pdf"];
NSURL *pdfUrl = [NSURL fileURLWithPath:pdfPath];
CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithURL((CFURLRef)pdfUrl);
2 голосов
/ 01 июля 2013

Важно отметить, что это больше не будет работать, если вы используете ARC. В результате вам нужно будет создать связующее звено. Смотрите ниже:

NSString *pdfPath = [[NSBundle mainBundle] 
                 pathForResource:@"salonMap" ofType:@"pdf"];
NSURL *pdfUrl = [NSURL fileURLWithPath:pdfPath];
CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfUrl);
...