似乎无法使用ARC从NSString *转换为CFString *
我使用以下代码在Objective-C(Mac OS X Cocoa Application)中获取文件的文件类型:
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 *'(又名'const __CFString **')的C风格转换将限定符
在做了一些研究后,我发现需要使用__bridge
关键字来将NSString *转换为ARC中的CFStringRef *。 所以我坚持在关键字,生产:
LSCopyKindStringForURL((CFURLRef)url, (__bridge CFStringRef*)&kind);
现在,我收到以下错误:
不兼容的类型使用__bridge强制转换'NSString * __ strong *'到'CFStringRef *'(又名'const __CFString **')
它开始让我疯狂......无论我如何尝试,我都无法让错误消失。 有任何想法吗?
有一个简单的解决方法。 使用实际的CFStringRef
变量,并在需要时将其作为NSString
返回:
NSURL *url = [NSURL fileURLWithPath:[path stringByExpandingTildeInPath]];
CFStringRef kind;
LSCopyKindStringForURL((CFURLRef)url, &kind);
return kind ? CFBridgingRelease(kind) : @"";
我使用以下来获得善意
(NSURL *)path
NSString *tempKind;
[path getResourceValue:&tempKind forKey:NSURLLocalizedTypeDescriptionKey error:nil];
链接地址: http://www.djcxy.com/p/44917.html
上一篇: Can't seem to cast from NSString* to CFString* using ARC