Apple提供了创建PDF文档的示例代码。但它使用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 - file:///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 :(得分:10)
CFURLRef
和NSURL
是免费桥接的。通常情况下,你会这样做:
NSURL *url = ...;
CFURLRef cfurl = CFBridgingRetain(url);
当你不再需要CFURL对象时:
CFRelease(cfurl);
或者,如果你有理由确定NSURL会坚持到足够长的时间,你就可以做到
CFURLRef cfurl = (__bridge CFURLRef)url;
如果您发生了崩溃,这可能意味着您过度发布了某些内容 - 具体而言,您发布了一个您不拥有的对象。我建议阅读Apple关于对象所有权的文档: