Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Convert NSURL to CFURLRef

Apple gives sample code for Creating PDF document. But It uses CFURLRef

NSPanel savepanel gives NSURL.

I can't convert NSURL to CFURLRef

 path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);

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

output is

2016-04-22 00:34:26.648 XXX Analysis[12242:813106] CFURLRef AnalysisReport.pdf -- file:///Users/xxxxxx/Library/Containers/com.xxxxxx.xxxnalysis/Data/

convert code which i find

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

output is

2016-04-22 00:37:20.494 XXX Analysis[12325:816505] NSURL file:///Users/xxxxxx/Documents/xxxnalysis.pdf

at the end PDF file is saved but Program crash when the NSPanel closed.

like image 394
codezero Avatar asked Apr 21 '16 21:04

codezero


1 Answers

CFURLRef and NSURL are toll-free bridged. So typically, you would just do this:

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

And when you no longer need the CFURL object:

CFRelease(cfurl);

Or if you're reasonably certain that the NSURL will stick around long enough, you can just do

CFURLRef cfurl = (__bridge CFURLRef)url;

If you're getting a crash, that probably means you're over-releasing something — specifically, that you're releasing an object that you don't own. I would suggest reading Apple's docs on object ownership:

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

like image 153
dgatwood Avatar answered Sep 20 '22 15:09

dgatwood