gpt4 book ai didi

objective-c - 似乎无法使用 ARC 从 NSString* 转换为 CFString*

转载 作者:行者123 更新时间:2023-12-03 17:02:31 25 4
gpt4 key购买 nike

我使用以下代码在 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);

说:

C-style cast from 'NSString *__strong *' to 'CFStringRef *' (aka 'const __CFString **') casts away qualifiers

经过一些研究,我发现需要 __bridge 关键字才能使从 NSString* 到 CFStringRef* 的转换在 ARC 中有效。所以我坚持使用关键字,产生:

LSCopyKindStringForURL((CFURLRef)url, (__bridge CFStringRef*)&kind);

现在,我收到以下错误:

Incompatible types casting 'NSString *__strong *' to 'CFStringRef *' (aka 'const __CFString **') with a __bridge cast

这开始让我发疯......无论我尝试什么,我都无法让错误消失。有什么想法吗?

最佳答案

有一个简单的解决方法。使用实际的 CFStringRef 变量,并在需要将其作为 NSString 返回时进行强制转换:

NSURL *url = [NSURL fileURLWithPath:[path stringByExpandingTildeInPath]];
CFStringRef kind;
LSCopyKindStringForURL((CFURLRef)url, &kind);
return kind ? CFBridgingRelease(kind) : @"";

关于objective-c - 似乎无法使用 ARC 从 NSString* 转换为 CFString*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com