我使用以下代码在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 *'的C风格演员表到' CFStringRef *' (又名 ' const __CFString **')抛弃限定符
在做了一些研究后,我发现需要__bridge
关键字才能使从NSString *到CFStringRef *的转换在ARC中有效。所以我坚持使用关键字,生成:
LSCopyKindStringForURL((CFURLRef)url, (__bridge CFStringRef*)&kind);
现在,我收到以下错误:
不兼容的类型施放&#NSString * __ strong *'到' CFStringRef *' (又名' const __CFString **')与__bridge演员
它开始让我发疯...不管我似乎尝试过什么,我只是不能让错误消失。有什么想法吗?
答案 0 :(得分:2)
有一个简单的解决方法。使用实际的CFStringRef
变量并在需要时将其转换为NSString
:
NSURL *url = [NSURL fileURLWithPath:[path stringByExpandingTildeInPath]];
CFStringRef kind;
LSCopyKindStringForURL((CFURLRef)url, &kind);
return kind ? CFBridgingRelease(kind) : @"";
答案 1 :(得分:0)
我使用以下内容来获得实物
(NSURL *)path
NSString *tempKind;
[path getResourceValue:&tempKind forKey:NSURLLocalizedTypeDescriptionKey error:nil];