【问题标题】: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 是我需要的正确类型。 谢谢。

【问题讨论】:

  • 请用谷歌搜索你的问题,很难吗?
  • @luk2303,这并不难。我确实看到了其他帖子,但是该线程中的解决方案对我不起作用。让我解释一下:我知道删除 * 可以解决错误,但仍然存在警告......因此,我可能做错了其他事情。寻求帮助。

标签: objective-c xcode


【解决方案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 *')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多