3

Apple дает образец кода для создания PDF-документа. Но он использует CFURLRefКак конвертировать NSURL в CFURLRef

NSPanel savepanel дает NSURL.

Я не могу конвертировать NSURL в CFURLRef

path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8); 

url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0); 
NSLog(@"CFURLRef %@",url); 

выход

2016-04-22 00: 34: 26,648 XXX Анализ [12242: 813106] CFURLRef AnalysisReport.pdf - Файл: ///Users/xxxxxx/Library/Containers/com.xxxxxx.xxxnalysis/Data/

новообращенного код, который я нашел

url = (__bridge CFURLRef)theFile; 
NSLog(@"NSURL %@",url); 

выход

2016-04-22 00: 37: 20,494 XXX Анализ [12325: 816505] NSURL файл: ///Users/xxxxxx/Documents/xxxnalysis.pdf

в PDF файле конца сохраняется но сбой программы при закрытии NSPanel.

+0

, как это крах выглядит? Любые ошибки в песочнице? –

+0

Я нашел свой ответ. если вы не создаете CFStringRef с CFStringCreateWithCString. Вам не нужно вызывать CFRelease (url); – codezero

ответ

9

CFURLRef и NSURL являются бесплатными мостами. Так обычно, вы бы просто сделать это:

NSURL *url = ...; 
CFURLRef cfurl = CFBridgingRetain(url); 

И не когда больше не нужен объект CFURL:

CFRelease(cfurl); 

Или, если вы достаточно уверены, что NSURL будет придерживаться достаточно долго, вам может просто сделать

CFURLRef cfurl = (__bridge CFURLRef)url; 

Если вы получаете аварии, что, вероятно, означает, что вы более-рилизинг-то - в частности, что вы отпуская объект, который вы не владеете. Я хотел бы предложить чтение документации от Apple на собственность объекта:

https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html

 Смежные вопросы

  • Нет связанных вопросов^_^