6

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 を閉じたときにプログラムがクラッシュします。

4

1 に答える 1

13

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

于 2016-05-18T22:31:54.183 に答える