1

public.pem公開鍵が保存されているファイルを読み込もうとしていますが、CFReadStreamRef常に nil を返します。publicKeyPathそしてurlnilではなく(デバッガーで確認できるように)、ファイルの読み取りまたは書き込みを行う他のスレッドがありません。どうすればこれを修正できますか?

NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public" ofType:@"pem"];
CFURLRef url  = (CFURLRef)CFBridgingRetain([NSURL URLWithString:publicKeyPath]);
CFReadStreamRef cfrs = CFReadStreamCreateWithFile(kCFAllocatorDefault, url);
4

2 に答える 2

1
NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public" ofType:@"pem"];

/private/var/mobile/.../public.pemこれは、、または/foo/bar略してのようなものを返します。

CFURLRef url  = (CFURLRef)CFBridgingRetain([NSURL URLWithString:publicKeyPath]);

これにより、文字列 からURLが作成されます/foo/bar。これは完全に有効な相対URLです(ベースURLによって決定されるscheme://authority/foo/bar場所にリンクします。scheme://authority

必要なのは絶対ファイルURLです。これは、が必要であることを意味します+fileURLWithPath:。または、を使用します-URLForResource:withExtension:。これにより、最初からファイルのURLが提供されます。

NSURL *url= [[NSBundle mainBundle] URLForResource:@"public.pem" withExtension:nil];
CFReadStreamRef cfrs = CFReadStreamCreateWithFile(kCFAllocatorDefault, (__bridge CFURLRef)url);
于 2013-02-23T17:01:59.707 に答える
1

使うべきだった[NSURL fileURLWithPath:publicKeyPath]

于 2013-02-23T17:00:33.883 に答える