【发布时间】:2015-01-03 22:13:56
【问题描述】:
我正在使用以下代码在 Objective-C(Mac OS X Cocoa 应用程序)中获取文件的文件类型:
NSString *kind = nil;
NSURL *url = [NSURL fileURLWithPath:[path stringByExpandingTildeInPath]];
LSCopyKindStringForURL((CFURLRef)url, (CFStringRef*)&kind);
return kind ? kind : @"";
但是,产生的唯一错误是在以下行:
LSCopyKindStringForURL((CFURLRef)url, (CFStringRef*)&kind);
说:
从 'NSString *__strong *' 到 'CFStringRef *' 的 C 风格转换(又名 'const __CFString **') 抛弃限定符
在做了一些研究之后,我发现需要 __bridge 关键字才能使从 NSString* 到 CFStringRef* 的转换在 ARC 中有效。所以我坚持使用关键字,产生:
LSCopyKindStringForURL((CFURLRef)url, (__bridge CFStringRef*)&kind);
现在,我收到以下错误:
不兼容的类型将 'NSString *__strong *' 转换为 'CFStringRef *' (又名 'const __CFString **')带有 __bridge 演员表
它开始让我发疯......无论我似乎尝试什么,我都无法让错误消失。有什么想法吗?
【问题讨论】:
标签: objective-c macos cocoa automatic-ref-counting cfstring