似乎无法使用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

下一篇: Run Code at Deallocation of Any Object