将 'NSString *' 转换为 'CTStringRef *' 的不兼容类型
Posted
技术标签:
【中文标题】将 \'NSString *\' 转换为 \'CTStringRef *\' 的不兼容类型【英文标题】:Incompatible types casting 'NSString *' to 'CTStringRef *'将 'NSString *' 转换为 'CTStringRef *' 的不兼容类型 【发布时间】:2015-04-14 20:40:41 【问题描述】:我只是想将 NSString* 转换为 CTStringRef*
NSString *foobar = @"foobar";
CFStringRef *tmp = (__bridge_retained CFStringRef*)foobar;
有人可以帮助解决这个错误吗? "不兼容的类型将 'NSString *' 转换为 'CTStringRef *' (aka const struct __CFString **) with a __bridge_retained cast"
我已经尝试过简单的 __bridge,但它也不起作用。从文档中,我认为 _retained 是我需要的正确类型。 谢谢。
【问题讨论】:
NSString to CFStringRef and CFStringRef to NSString in ARC? 的可能重复项 请用谷歌搜索你的问题,很难吗? @luk2303,这并不难。我确实看到了其他帖子,但是该线程中的解决方案对我不起作用。让我解释一下:我知道删除 * 可以解决错误,但仍然存在警告......因此,我可能做错了其他事情。寻求帮助。 【参考方案1】:如果您仔细查看错误消息,您会发现问题所在。提示在这部分 -
__CFString **
注意两个 * - 这意味着您正在尝试将指针转换为指向指针的指针,或者换句话说,是对引用的引用。 CTStringRef
已经是一个引用,正如名称的“Ref”部分所暗示的那样,因此您不需要 (__bridge_retained CFStringRef*)
中的 *
你的代码应该是这样的
NSString *foobar = @"foobar";
CFStringRef tmp = (__bridge_retained CFStringRef)foobar;
【讨论】:
您的意思是 CFStringRef tmp,而不是 CFStringRef *tmp。 谢谢。错过了一个:) 删除 * 修复了错误,但现在出现警告:'不兼容的指针类型正在初始化 'CFStringRef *' (aka 'const struct __CFStringRef **') 与 CFStringRef 类型的表达式 (aka 'const struct __CFStringRef *')以上是关于将 'NSString *' 转换为 'CTStringRef *' 的不兼容类型的主要内容,如果未能解决你的问题,请参考以下文章
将 'NSString *' 转换为 'CTStringRef *' 的不兼容类型
如果将一个NSObject从NSDictionary转换为NSString?