1

我正在尝试读取public.pem存储公钥的文件,但CFReadStreamRef总是返回 nil。publicKeyPath并且url不是零(正如我在调试器中看到的那样),并且我没有其他线程读取或写入文件。我怎样才能解决这个问题?

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

2 回答 2

1

我应该用[NSURL fileURLWithPath:publicKeyPath]

于 2013-02-23T17:00:33.883 回答
1
NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public" ofType:@"pem"];

这将返回类似的东西/private/var/mobile/.../public.pem,或/foo/bar简称。

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

这将从字符串 /foo/bar创建一个 URL 。这是一个完全有效的相对 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 回答