我正在尝试读取存储公钥的public.pem
文件,但CFReadStreamRef
始终返回nil。 publicKeyPath
和url
不是nil(正如我在调试器中看到的那样),我没有其他线程读取或写入文件。我该如何解决这个问题?
NSString *publicKeyPath = [[NSBundle mainBundle] pathForResource:@"public" ofType:@"pem"];
CFURLRef url = (CFURLRef)CFBridgingRetain([NSURL URLWithString:publicKeyPath]);
CFReadStreamRef cfrs = CFReadStreamCreateWithFile(kCFAllocatorDefault, url);
答案 0 :(得分:1)
我应该使用[NSURL fileURLWithPath:publicKeyPath]
答案 1 :(得分: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
创建一个网址。这是一个完全有效的相对网址(它链接到scheme://authority/foo/bar
,其中scheme://authority
由基本网址确定。
您想要的是绝对文件网址,这意味着您需要+fileURLWithPath:
。或者,使用-URLForResource:withExtension:
,它将从一开始就为您提供文件URL:
NSURL *url= [[NSBundle mainBundle] URLForResource:@"public.pem" withExtension:nil];
CFReadStreamRef cfrs = CFReadStreamCreateWithFile(kCFAllocatorDefault, (__bridge CFURLRef)url);